【问题标题】:Select XElement witch have numeric value using XPath使用 XPath 选择具有数值的 XElement
【发布时间】:2020-11-24 11:57:24
【问题描述】:

我有这个 xml 文件,我想使用 XPath 提取所有具有数值属性的 xelement

<XtraSerializer version="1.0" application="TabbedView">
  <property name="Items" iskey="true" value="5">
    <property name="Item1" isnull="true" iskey="true">
      <property name="Name">5d297655-eee4-4ab5-baa7-7d12964ac1ad</property>
      <property name="TypeName">Document</property>
    </property>
    <property name="Item3" isnull="true" iskey="true">
      <property name="Name">48575907</property>
      <property name="TypeName">DockingContainer</property>
    </property>
    <property name="Item4" isnull="true" iskey="true">
      <property name="Index">0</property>
      <property name="Name">63403262</property>
      <property name="TypeName">DockingContainer</property>
    </property>
  </property>
</XtraSerializer>

我的结果必须是:

<property name="Name">48575907</property>
<property name="Name">63403262</property>

我使用这种语法 //property[text()=number] 在测试仪https://www.freeformatter.com/xpath-tester.html#ad-output

但它给了我 NO MATCH!

我用来实现目标的语法有什么问题?

【问题讨论】:

    标签: xpath


    【解决方案1】:

    试试这个返回property节点的XPATH,其整数值不等于0

    //property[number(text()) != 0]
    

    如果您还想获取零值:

    //property[number(text()) != 0 or number(text()) = 0]
    

    【讨论】:

    • 谢谢,但是使用测试仪它给了我:无法执行 XPath 操作。 number() 的第一个参数不允许包含多个项目的序列 (text(""), text(""), text(""), ...)
    • @naourez 除了 XPATH 测试器之外,您是否在其他地方尝试过?在this tester 中也可以正常工作
    • 是的,我在 c# 代码中尝试过,但它给了我所有不包含 0 的属性,但我只需要数值
    • @naourez ,更具体的表达方式//property[@name="Name" and number(text()) != 0]//property[@name="Name" and number(text()) != "NaN"] 怎么样?
    • 我的 xml 文件比我指出的示例长。属性名称包含许多值作为字符串和其他值作为数值,这就是为什么我需要一般规则而不指示字符串值
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多