具有不同节点路径的XPath

时间:2017-02-27 19:54:13

标签: c# xml xpath

我尝试使用正确的XPath来获取基于条件的节点,该条件不是要使用C#中的XDocument.XPathSelectElement方法选择的XPath的一部分。

所以,让我说我有以下XML。

<Root>
    <Parties>
        <Party>
            <Person>
                <Name>Bob Smith</Name>
            </Person>
            <Role>
                <Type>Borrower</Type>
            </Role>
        </Party>
        <Party>
            <Person>
                <Name>Mary Smith</Name>
            </Person>
            <Role>
                <Type>CoBorrower</Type>
            </Role>
        </Party>
    </Parties>
</Root>

所以我想得到的是

的价值
//Root/Parties/Party/Person/Name 

其中

//Root/Parties/Party/Role/Type 

是借款人&#39;

根据我的研究,在发布问题之前,我认为以下内容可能有效,但没有运气。

XDocument xDoc = XDocument.Parse(xml);
var elm = xDoc.XPathSelectElement("//Root/Parties/Party[./Role/[Type = 'Borrower']/Person/Name");

但是这段代码给了我以下例外:

  

未处理的类型&#39; System.Xml.XPath.XPathException&#39;发生在System.Xml.dll中   附加信息:表达式必须评估为node-set

2 个答案:

答案 0 :(得分:2)

使用此XPath表达式:

//Root/Parties/Party[Role/Type/text() = 'Borrower']/Person/Name

它可以为您提供所需的结果

Bob Smith

答案 1 :(得分:0)

或试试这个:

//类型[=&#34;借款人&#34;] /父::节点()/前同辈::节点()//名称