我有以下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, '#')]");