如何使用xpath从xml中检索元素值?

问题描述:

如何从下面的XML检索sitename元素值?如何使用xpath从xml中检索元素值?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:63630/Service.svc</To> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/GetDemographic</Action> 
    </s:Header> 
    <s:Body> 
    <GetDemographic xmlns="http://tempuri.org/"> 
     <userIdentifier>first value</userIdentifier> 
     <sitename>second value</sitename> 
     <demographicName>third value</demographicName> 
    </GetDemographic> 
    </s:Body> 
</s:Envelope> 

下面的代码我试图返回null:

var xmlDocument = new XmlDocument(); 
xmlDocument.LoadXml(myXml); 
var result = xmlDocument.SelectNodes("//sitename"); 

是问题的XML命名空间?我可以搜索名称空间值,因为sitename元素没有分配给它的名称空间吗?

我发现下面的代码工作正常:

xmlDocument.SelectNodes("//*[local-name()='sitename']"); 

如何使它不区分大小写?

+0

'“// s:Envelope/s:Body/GetDemographic/sitename”'?? – Nolonar 2013-03-26 14:30:57

+0

我希望它是通用的 – 2013-03-26 14:40:59

尝试看看这些链接;)在.NET

不区分大小写的XPath:http://blogs.msdn.com/shjin/archive/2005/07/22/442025.aspx

使用XPath与MSXML执行不区分大小写的搜索:http://support.microsoft.com/kb/315719

例如:

XMLDoc.SelectNodes("Cars/car[contains(.,'Protan')]") 

以上选择的结果应该与此选择的结果相同

XMLDoc.SelectNodes("Cars/car[contains(.,'protan')]")' 

我有类似的问题。我能够通过使用名称空间管理器添加名称空间来解决此问题。

这里有一个类似的Q/A:(Using Xpath With Default Namespace in C#

希望有所帮助。