如何通过 XPath 检索 CDATA 标记内的元素文本?

2023-12-11

考虑以下 xml 片段:

<Obj>
   <Name><![CDATA[SomeText]]></Name>
</Obj>

如何通过 XPath 检索“SomeText”值?我正在使用 Nauman Leghari 的(非常好)可视化 XPath 工具.
/Obj/Name返回元素
/Obj/Name/text()返回空白

我不认为这是该工具的问题(我可能是错的)-我还读过 XPath 无法提取 CDATA(请参阅最后的回复在这个线程中) - 这对我来说听起来有点奇怪。


/Obj/Name/text()是返回 CDATA 标记内容的 XPath。

让我失望的是 Value 属性的行为。对于 XMLNode(DOM 世界),Element(带有 CDATA 或其他)的 XmlNode.Value 属性返回 Null。 InnerText 属性将为您提供 CDATA/Text 内容。 如果使用 Xml.Linq,XElement.Value 返回 CDATA 内容。

string sXml = @"
<object>
    <name><![CDATA[SomeText]]></name>
    <name>OtherName</name>
</object>";

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml( sXml );
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable);

Console.WriteLine(@"XPath = /object/name" );
WriteNodesToConsole(xmlDoc.SelectNodes("/object/name", nsMgr));

Console.WriteLine(@"XPath = /object/name/text()" );
WriteNodesToConsole( xmlDoc.SelectNodes("/object/name/text()", nsMgr) );

Console.WriteLine(@"Xml.Linq = obRoot.Elements(""name"")");
XElement obRoot = XElement.Parse( sXml );
WriteNodesToConsole( obRoot.Elements("name") );

Output:

XPath = /object/name
        NodeType = Element
        Value = <null>
        OuterXml = <name><![CDATA[SomeText]]></name>
        InnerXml = <![CDATA[SomeText]]>
        InnerText = SomeText

        NodeType = Element
        Value = <null>
        OuterXml = <name>OtherName</name>
        InnerXml = OtherName
        InnerText = OtherName

XPath = /object/name/text()
        NodeType = CDATA
        Value = SomeText
        OuterXml = <![CDATA[SomeText]]>
        InnerXml =
        InnerText = SomeText

        NodeType = Text
        Value = OtherName
        OuterXml = OtherName
        InnerXml =
        InnerText = OtherName

Xml.Linq = obRoot.Elements("name")
        Value = SomeText
        Value = OtherName

Turned out the author of Visual XPath had a TODO for the CDATA type of XmlNodes. A little code snippet and I have CDATA support now. alt text

MainForm.cs

private void Xml2Tree( TreeNode tNode, XmlNode xNode)
{
   ...
   case XmlNodeType.CDATA:
      //MessageBox.Show("TODO: XmlNodeType.CDATA");
      // Gishu                    
      TreeNode cdataNode = new TreeNode("![CDATA[" + xNode.Value + "]]");
      cdataNode.ForeColor = Color.Blue;
      cdataNode.NodeFont = new Font("Tahoma", 12);
      tNode.Nodes.Add(cdataNode);
      //Gishu
      break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 XPath 检索 CDATA 标记内的元素文本? 的相关文章

  • 为什么 XPath 不能与 xmlns 属性一起使用

    我有以下 XPath 表达式 configuration properties 这是我的 XML
  • 从部分 XPath 获取完整 XPath

    我正在使用 selenium 和 perl 并在页面上有标签 要访问此标签 我有以下 xpath text some here 需要获取该元素的完整 xpath 的问题 例如 html body table tr any other and
  • Xpath 测试祖先属性不等于字符串

    我正在尝试测试元素祖先的属性是否不等于字符串 这是我的 XML
  • 如何使用 xpath 检查某个对象在网页中是否可见?

    我正在 R 中使用 RSelenium 包来进行网络抓取 有时加载网页后 需要检查某个对象在网页中是否可见 例如 library RSelenium open a browser RSelenium startServer remDr lt
  • 如何使用XPath选择非空段落?

    我想要抓取的网页具有类似的结构 每个都有一个段落是一个问题 一个段落是一个答案 我想抓取每个问题和答案并将它们存储在两个项目中 问题是 在某些页面上 问题和答案分别是 xxx p 1 and xxx p 2 但在其他页面上 xxx p 1
  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • 如何在Python中处理xpath中的单引号和双引号

    我有一个 XPath 它在 XPath 中有一个单引号 这会导致SyntaxError error 我尝试过转义序列 xpath label contains text Ayuntamiento de la Vall d Uix Festi
  • 如何确定 Android UI 元素的 XPATH。硒 + Appium

    我目前正在使用 Appium 和 Selenium 自动化 Android 应用程序 并且在通过 ID 定位元素时遇到了一些问题 我想使用 XPATH 但不知道如何获取 android UI 元素的 XPATH 有谁知道如何确定元素的 XP
  • XML中的根节点、根元素和文档元素有什么区别?

    我在读W3C XML 路径语言 XPath 版本 1 0 第 5 1 节 根节点 https www w3 org TR 1999 REC xpath 19991116 root node 根节点是树的根 除非作为树的根 否则不会出现根节点
  • 如何从“健康”元素中提取文本

    我花了几个小时试图找到在硒中使用该游戏的 HP 值的正确链接 为了检查您自己 我将提供如下用户名和密码 网站 https s3 en bitefight gameforge com user login https s3 en bitefi
  • 带单引号的 XPATH 查询[重复]

    这个问题在这里已经有答案了 有人知道如何解决这个问题吗 单引号让我陷入困境 nodes xml gt xpath item contains catalog Billy s Blogs title 我尝试以各种方式逃避它 但都抛出错误 no
  • 用 xpath 替换 xml 中的属性

    我想获取通过 xpath 找到的属性并将其替换到文档中 这是 XML
  • XPath 选择具有特定属性值的元素?

    我在使用 XPath 选择节点时遇到问题 我将展示一个示例 由于实际数据量很大 xml 文件被缩短了 这是 XML 的子集
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • PHP 中的 XPath 删除 HTML 标签

    我在 PHP 中使用 XPath 来检索 HTML 文档的一部分 假设我的 HTML 文档如下所示 div a href some link address com Hello a p Some text here p div div p
  • 使用 xPath 还是正则表达式?

    下面的两种方法都有相同的目的 扫描帖子的内容并确定是否至少有一个 img 标签具有包含正在测试的 关键字 的 alt 属性 我是 xPath 的新手 更愿意使用它 具体取决于该方法与正则表达式版本相比的昂贵程度 方法 1 使用 preg m
  • XML-XSLT:如何比较字符串中的两个日期

    我知道这个问题可能会重复 而且我也浏览过类似的文章和问题 但我还没有找到确切的解决方案 现在问题 我在用XSLT or XPATH来转换 xml XML 中有两个字符串变量 一个是OldDate第二个是CurrentDate Ex oldD
  • AttributeError:“列表”对象没有属性“文本”,在 DOM 中查找元素时出错

    我尝试在树 DOM 中查找元素 但遇到问题 我写 age browser find elements by xpath div id ads ul li 6 span 2 text 但它一直显示我的错误 属性错误 列表 对象没有属性 文本
  • 使用 PHP 从 XML 文件重新调整多个动态结果的 XPATH 方法

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个用户输入或选择一个值的表单
  • 如何以最短的等待时间加速 Java Selenium 脚本

    我目前正在开发一个 java selenium 项目 这通常是一个小脚本 我必须在其中检查每个元素是否存在 并基于触发一些操作 但我们主要关心的是完成脚本的持续时间 基本上 我在脚本中使用了下面的每一个并运行了测试 尽管在每种情况下脚本都在

随机推荐