如何通过 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 查询的 Flex/AS3/E4X 等效项是什么?

    鉴于此文档
  • 硒找不到元素

    我在访问元素时遇到问题 fieldset legend Legend1 legend table width 100 quot cellspacing 3 tbody tr tr tr tr tbody table fieldset leg
  • 在 Hive 中分解一行 XML 数据

    我们将 XML 数据作为名为 XML 的单个字符串列加载到 Hadoop 中 我们正在尝试检索数据级别 并将其标准化或分解为单行进行处理 你知道 就像表格一样 已经尝试过分解功能 但没有得到我们想要的 示例 XML
  • 如何存储xpath的内容/值?

    假设xpath如下 xpath div id cslGridViewPanelControl div div 2 div table tbody tr td 2 table tbody tr td table tbody tr td div
  • XPath 直到下一个标签

    与之前在这里问过的其他人类似的问题 但由于我不知道如何应用这些建议 所以我需要一些帮助 我想找到一个 html 文档的节点 其结构如下 摘录 可能有所不同 h2 My title 1 h2 h3 Sub heading h3 p span
  • 在 VBScript 中导航 XML 节点(对于 Dummy)

    我正在尝试编写一个脚本来为我操作 xml 文件中的一些数据 我对 VBScript 还很陌生 但有 VB NET 和 VBA 背景 所以我觉得我知道自己在做什么 我认为可能有更好的方法来导航文件 而不是对每一行进行大量调用 InStr 或类
  • 获取没有特定祖先 xml xpath 的节点

    我想要 xpath 它获取没有祖先的节点 它是特定节点的第一个后代 假设我们有这样的 xml 文档 a b This node b a
  • simplexml 和 xpath,读取同级

    我有以下 XML 文件
  • xpath 的多个 string() 结果?

    string 在我试图从中提取文本的某个网页上效果很好 具有类似的结构 对于 bing 我尝试过的 xpath 是 string h3 a 即使有强标签等 它也能很好地获取搜索结果 但只返回第一个结果 有没有类似 strings 的东西 这
  • Xpath 和通配符

    我尝试了几种组合但没有成功 该数据的完整 xpath 是 id detail row seek 37878 td问题是每个节点的数字部分 37878 都会发生变化 因此我无法使用 foreach 循环遍历节点 有没有办法使用通配符并将 xp
  • Xpath 获取 if href 包含字符串的一部分

    您好 我尝试获取包含 href p random tagged see 的所有元素 这是我的路线 div preceding h2 text Most recent div div a href p tagged see 我该如何修复此代码
  • XPath 中的 ., 有什么用?

    为什么在某些 XPath 表达式中句号后面使用逗号 这是一个例子 Set nlist doc selectNodes book author first name starts with M 我试图用谷歌搜索这个 但字面意思 运算符似乎不喜
  • XPath JMeter 断言:错误“前缀必须解析为命名空间”

    我正在尝试使用JMeter XPath 断言 https jmeter apache org usermanual component reference html XPath Assertion使用 XPath 断言命令对标签值进行如下操
  • 如何使用 xpath 检查某个对象在网页中是否可见?

    我正在 R 中使用 RSelenium 包来进行网络抓取 有时加载网页后 需要检查某个对象在网页中是否可见 例如 library RSelenium open a browser RSelenium startServer remDr lt
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • Python Selenium - 如何单击表中一组元素中的倒数第三个元素?

    今天是个好日子 有人可以向我解释一下我如何无法获取表中的元素数量吗 我正在浏览多个具有不同长度的表格 并且我总是需要第三个最后一项 我有包含这些的表的 xpath 使用 Selenium 的 Python API 如何获取表中的行数 htt
  • 如何使用不同的搜索创建元素的 Xpath ( cssSelector / tag / ClassName )

    我想使用不同的 cssSelector tag ClassName 找到一个元素 并获取它的 xpath 值 更具体地说 我有一个网站 当一天发生变化时 其中一个类会更改它的类 这是我该怎么做意思是 tr td 1 1 2019 td td
  • 如何从“健康”元素中提取文本

    我花了几个小时试图找到在硒中使用该游戏的 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
  • xQuery LIKE 运算符?

    有没有办法以与 SQL 相同的方式使用 XQuery 执行 LIKE 操作 我不想构造一些 startswith endswith 和 contains 表达式 我想要实现的目标的示例 for x in user where x first

随机推荐