【问题标题】:Using XPath with node attributes将 XPath 与节点属性一起使用
【发布时间】:2017-02-13 16:11:29
【问题描述】:

我已经掌握了 XPaths 的基本知识,但是在确定使用 XPath 在 C# 代码中是否可能执行以下操作时遇到了一些麻烦(或者我是否需要将其移到其他代码中,就像我目前所做的那样)。

我有一个包含以下结构的 XML 文档:

 <xml>
     <parameters>
        <setParameter name="SomeName" value="SomeValue" />
     </parameters>
 </xml>

其中有多个设置参数值。现在我需要做的只是检索那些包含 name 属性的某些值的 setParameter 节点。我可能有这些值的可能匹配列表,但它们不会是完全匹配的,它们将是节点的 name 属性必须包含的值。

例如在上面的结构代码中,如果我有一个值 'men' 要匹配,它将与节点一起返回,因为 'men' 包含在 'SomeName' 中

这样做的简写是什么?

【问题讨论】:

  • 你有 xpath 的例子吗?
  • 很简单的地方:"parameters/setParameter"

标签: c# xml xpath


【解决方案1】:

检索所有名为setParametername 属性值包含men 的元素的所有属性值value

//setParameter[contains(@name, 'men')]/@value
  • //设置参数

检索所有名为setParameter的节点(可替换为/xml/parameters/setParameter

  • [...]

检查当前节点选择的属性

  • 包含(@name, 'men')

如果name 属性的值包含men,则返回true

  • /@值

检索value 属性的值。

【讨论】:

  • 这是不区分大小写的吗?
  • @Polyfun 不,它区分大小写。请参阅this answer 了解不区分大小写。
  • OP 想要一个不区分大小写的匹配。
  • @Polyfun 我一定是困了,但我没看到这个要求。
【解决方案2】:

我认为没有办法将属性与通配符匹配,但您可以使用 contains 方法,例如:

//parameters/setParameter[contains(@name, "stringexample")]

【讨论】:

    【解决方案3】:

    根据您的 XPath 版本,这可能有效,也可能无效:

    //setParameter[matches(@name,"men", "i") or matches(@name,"else", "i")]
    

    这应该匹配&lt;setParameter&gt; 与包含"men""else"name 属性。不区分大小写

    试着告诉我结果

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2015-07-09
      相关资源
      最近更新 更多