我有以下XML片段,请注意,“引用”节点包含一个URI,该URI链接到“主体”节点的Id属性。

 <Reference URI="#Body">
  <SOAP-ENV:Body Id="Body" xmlns:SOAP-ENV="http://www.dingo.org">
    <ns0:Add xmlns:ns0="http://www.moo.com">
      <ns0:a>2</ns0:a>
      <ns0:b>3</ns0:b>
    </ns0:Add>
  </SOAP-ENV:Body>


如果我具有URI属性的值,那么如何获取整个Body XMLNode?我认为最好通过XPath表达式来完成此操作,但是对XPath毫无任何了解。请注意,XML并不总是那么简单。我正在用c#btw :)

有任何想法吗?

谢谢

乔恩

编辑:我事先不会知道XML结构或名称空间,我只知道引用元素具有我要检索的xmlNode的ID,希望可以更清楚地了解。

最佳答案

您可以向XPath表达式的任何步骤添加适用于相对(或绝对节点)的条件。

在这种情况下:

//*[@id=substring-after(/Reference/@URI, '#')]


//*匹配文档中的所有元素。 []中的部分是一个条件。在条件内部,采用了根引用节点的URI元素的一部分,但忽略了“#”(及其之前的所有内容)。

示例代码,假设您已将XML加载到XPathDocument doc中:

var nav = doc.CreateNavigator();
var found = nav.SelectSingleNode("//*[@id=substring-after(/Reference/@URI, '#')]");

08-18 10:17