使用具有节点属性的XPath

问题描述:

我有XPaths的基础知识,但在确定在C#代码中是否可以使用XPath时可能会遇到一些问题(或者如果我需要将它移出到其他代码中,目前已经完成)。使用具有节点属性的XPath

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

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

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

例如在结构上面的代码,如果我有“人”要匹配的值,它会回来与节点,为“男人”被包含在“SomeName”

什么是速记去做这个?

+0

你有没有xpath的例子? – eLRuLL

+0

很简单:“参数/ setParameter” –

检索命名value具有名为setParameter所有元素的所有属性的含有men一个name属性的值的值:

//setParameter[contains(@name, 'men')]/@value 
  • //的setParameter

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

  • [...]

检查当前节点选择

  • 包含(@name, '男人')

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

  • /@值

检索value属性的值。

+0

这是不区分大小写? – Polyfun

+0

@Polyfun不,它区分大小写。请参阅[此答案](http://*.com/a/9805020/3283203)以区分大小写。 – Kilazur

+0

OP想要不区分大小写的匹配。 – Polyfun

我不认为有一种方法来匹配通配符的属性,但你可以使用contains方法是这样的:

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

根据您的XPath版本这可能工作也可能不:

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

这应该与包含"men"什么"else"name属性匹配<setParameter>。这是不区分大小写的

试着让我知道结果