在 Delphi 中使用 XPath 查找元素

2023-12-02

我试图在 Delphi 中的 XML 文档中查找元素。我有这段代码,但它总是在日志中显示 0 个元素:

function TForm1.KannaSidu: Boolean;
var
  Doc: IXMLDOMDocument; 
  List: IXMLDomNodeList;
begin
  try
    Doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
    Doc.async:=False;
    Doc.load(Filename);
  except
    LogTx('Error on page');
  end;
  List:=Doc.selectNodes('/html/head');
  LogTx(IntToStr(List.length)+' elements');
  Result:=False;
end;

那么如何让 XPath 发挥作用呢?


在我在网上找到的示例代码中selectNodes方法,它前面是设置文档的代码SelectionNamespaces财产通过setProperty。有的甚至设定SelectionLanguage, too.

Doc.setProperty('SelectionLanguage', 'XPath');
Doc.setProperty('SelectionNamespaces',
  'xmlns:xsl=''http://www.w3.org/1999/XSL/Transform''');

根据您正在搜索的元素名称,我猜您正在处理 HTML 文件。基本的 HTML 元素位于http://www.w3.org/1999/xhtml名称空间,所以试试这个:

Doc.setProperty('SelectionNamespaces',
  'xmlns:x=''http://www.w3.org/1999/xhtml''');
List := Doc.selectNodes('/x:html/x:head');

也可以看看:

使用 xmlns 时 selectNodes 不给出节点列表在微软的论坛上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Delphi 中使用 XPath 查找元素 的相关文章

  • vcl组合框并不总是显示它有焦点

    当我从另一个控件切换到组合框时 它会显示文本周围带有虚线的框 但是当我以编程方式将控件设置为活动状态时 它不会显示相同的焦点指示器 这种行为有解决方法吗 我有德尔福XE6 MCVE unit Unit27 interface uses Wi
  • 使用 XPath 将 URL 查询字符串解析为参数映射

    将 URL 查询字符串解析为最易读的方法是什么 param value XSLT XPath 3 0 中的映射 注意 这是中描述的函数的反函数使用 XPath 从参数映射构建 URL 查询字符串 https stackoverflow co
  • Delphi 7,加载PNG到TImage

    只是想加载 PNG 尝试使用适用于其他格式的 OleGraphic 来使用我的 LoadPic 但在 PNG 上失败 目标是将图像复制到隐藏位图 然后将其屏蔽并复制到可见的工作图像画布 如果 CopyRect 不这样做 请随意提出其他建议
  • SelectSingleNode 使用 XPath 对于已知良好的 xml 节点路径返回 null

    考虑这个简单的 XML 文档 此处显示的序列化 XML 是来自复杂 POCO 对象的 XmlSerializer 的结果 我无法控制该对象的架构
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 在运行时创建 TQReport 元素

    在运行时创建 TQReport 元素 嗯 至少尝试一下 我不知道这份报告中应出现哪些标题或数据 我得到一个代表数据行和列的 TString 的 TList 我在组的带打印事件中植入 创建 指令 并在主数据行带的 OnNeedData 事件中
  • XSLT2:如何在 XPath2 谓词中引用有关当前节点的属性

    我曾发帖另一个问题 https stackoverflow com questions 7921120 xslt2 how to set the value of a variable in a udf requiring a path c
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • Scrapy在页面上找不到表单

    我正在尝试编写一个自动登录的蜘蛛这个网站 https www athletic net account login ReturnUrl 2Fdefault aspx 但是 当我尝试使用scrapy FormRequest from resp
  • ElementNotInteractableException:消息:使用 Selenium 和 Python 将文本发送到输入字段时键盘错误无法访问元素

    from selenium import webdriver browser webdriver Firefox Opens Firefox webbrowser browser get https protonmail com Go to
  • 如何使用变量节点名称获取节点值?

    我有一个 XML 文档 例如
  • 如何以编程方式安排任务

    如何使用 delphi 7 像 Google updater 一样安排任务 我没有使用注册表 因为它被卡巴斯基防病毒软件检测为误报 我在注册表中作为启动项添加的任何内容都会被检测为特洛伊木马 因此我决定使用任务计划 下面的代码展示了如何删除
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • Delphi TImageList 位图更改

    我正在使用 Delphi XE2 Update 3 Update 4 与我们的一些第 3 方组件不兼容 因此我们尚未更新 我在我的应用程序中使用 TImageList 我注意到很多时候当它从源视图切换到表单视图 F12 时 突然之前未修改的
  • 如何在滚动框上创建缓慢的滚动效果?

    我喜欢在滚动框中平移图像后创建平滑的减慢滚动效果 就像平移地图一样谷歌地图 http maps google com 我不确定它是什么类型 但行为完全相同 当快速移动地图时 当您释放鼠标时它不会立即停止 而是开始减慢速度 有什么想法 组件
  • 如何使用 saxon 加载多个 xml 文件

    我想使用 saxon 进行 xpath 查询 但我不知道加载多个 xml 文件 我正在尝试从 Windows 命令行使用 saxon 我在撒克逊手册中读到我可以使用以下命令 Query exe s myDataFile xml q myQu
  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • TDictionary 上的 GetItem 由链接器消除

    我正在使用一个TDictionary of
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我

随机推荐

  • 登录到 SQL Server 触发器中的表

    我正在编写 SQL Server 2005 触发器 我想在触发器执行期间使用 INSERT 语句到我的日志表中进行一些日志记录 当执行过程中发生错误时 我想引发错误并取消导致触发器执行的操作 但不丢失日志记录 实现这一目标的最佳方法是什么
  • 如何使用 ASP.NET MVC 维护用户会话

    大家好 我想知道有什么方法可以在不使用 ASP NET MVC 中的成员身份的情况下维护登录 注销 用户会话等内容 Faraaz 您所指的领域涉及三种提供商模型 The 会员提供者涉及身份验证 验证用户并存储与用户相关的数据 例如上次登录日
  • 如何在Python中搜索和替换?

    如何在 ABC D1234 等字符串中添加字符 使其变为 ABC D 1234 另外 如何在前 2 个数字后添加字符 即从 ABC D1234 到 ABC D12 34 非常感谢 这取决于您用来决定在何处插入额外字符的规则 如果你想要它在第
  • 如何强制 C# .net 应用程序在 Windows 中仅运行一个实例? [复制]

    这个问题在这里已经有答案了 可能的重复 创建单实例应用程序的正确方法是什么 如何强制 C net 应用程序在 Windows 中仅运行一个实例 我更喜欢类似于以下的互斥解决方案 这样 如果应用程序已加载 它会重新关注该应用程序 using
  • 使用 vertx Web 客户端版本 4.0.0 时出现 java.lang.IllegalAccessError

    将 vertx 4 0 0 与 jdk 14 结合使用 尝试使用 vertx Web 客户端发出 REST 请求时 出现以下异常 15 56 48 294 vert x eventloop thread 0 ERROR io vertx c
  • Android如何在其他类中runOnUiThread?

    在我的应用程序中 在 MainActivity 中 有一个工作正常的线程 但是当我调用另一个类从服务器获取数据时 我无法在线程上运行 请参阅下面的代码示例 class MainActivity extends Activity implem
  • 从类库读取 web.config

    我有两个项目 1 没有接口的类库 只有一个api 2 网络应用程序 从网络应用程序中我将调用类库 api 所以我在Web应用程序中拥有所有的web config设置 但是当我调试时它总是返回空值 这里是代码片段 public static
  • 如何向我的 vega-lite 图表添加辅助 Y 轴?

    这个问题展示了一种将多个时间序列添加到 vega lite 图表的方法 如何使用 Vega Lite 在轴上绘制多个变量 有没有办法将第二个系列放在辅助 Y 轴上 我说的是在右侧放置另一个 Y 轴 以便时间序列可以具有不同的尺度 但仍然可以
  • VSCode 安装失败 - 无法提取安装程序

    VSCodeSetup exe Installation has failed Failed to extract installer 我无法安装或打开安装日志 尝试在 Windows 8 1 Enterprise 上安装 我刚刚下载了 V
  • 如何获取多个页面的数据?

    我的项目基于 React redux redux saga es6 我尝试从此 API 获取数据 如您所见 此特定 API 调用显示的数据限制为每页 100 条数据 分布在 40 个页面上 根据这个答案 它说您可以将限制扩展到每页最多 30
  • Perl 的 Capture::Tiny::capture() 是否避免了使用 system() 时所需的磁盘 io?

    当从 Perl 脚本调用外部程序时 Capture Tiny 是否避免了使用 system 时所需的磁盘 io 使用两者时我得到的性能基本相同 一位同事正在使用我的代码 并告诉我它正在攻击他的磁盘 我 也许 在本地计算机上运行并写入本地磁盘
  • C#:继承布尔值?

    如何 我可以从布尔值继承吗 或者使我的类与带有 运算符的布尔值相当 class MyClass Boolean public MyClass this true class Program public Program MyClass my
  • 如何处理Azure Python Function异常处理?

    我是 Python 异常处理新手 我该如何正确try下列 except if get entity失败 但通过如果Status 200 这是我所在的位置 但它不正确 希望您能举例说明 from azure cosmosdb table ta
  • 如何使用 FileReader javascript 读取 XML 文件?

    我需要从 ODF 文件获取 XML 我尝试使用 FileReader readAsText 和 readAsBinaryString 但它不起作用 文件读取器读取文本返回 odf 文件的一些特殊字符 with 读取为二进制字符串 var r
  • JavaScript 中的函数组合

    在下划线 低破折号等库中实现函数组合有什么好处 类似于 var compose function var funcs arguments return function var args arguments for var i funcs
  • 获取404页面的原始url

    所以我发现了这两个问题 在 IIS7 404 重定向页面中访问原始 URL 获取导致 404 的请求页面的 URL 但它们都是不同的语言 有没有办法获取导致 404 消息之类的地址在自定义消息中使用 例如 如果我要求example com
  • 在C#中将SID转换为用户名

    在 net中 我可以创建一个NTAccount使用域和用户名 并获取其 SID 但我无法使用翻译功能将 SID 转换回 NTAccount new SecurityIdentifier stringSid Translate typeof
  • 如何向 tcp 服务器发出 http 请求?

    我想要建立一个侦听端口 443 的 TCP 服务器 以便它可以接收 HTTP 请求并回发 现在我正在使用 Apache 和 PHP 以正常方式执行此操作 但是是否可以在没有 Web 服务器的情况下执行此操作 例如 我用 C NET 构建了一
  • 使用 Linq to Entities 将 UTC 转换为本地时间

    我需要在 LINQ to Entities 查询中将字段从 UTC 转换为本地时间 但它无法识别我打算使用的方法 System DateTime ToLocalTime 我的查询是这样的 选择本地当天不存在任何其他请求尚未解决的请求 考虑到
  • 在 Delphi 中使用 XPath 查找元素

    我试图在 Delphi 中的 XML 文档中查找元素 我有这段代码 但它总是在日志中显示 0 个元素 function TForm1 KannaSidu Boolean var Doc IXMLDOMDocument List IXMLDo