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

本文关键字:检索 元素 xml 何使用 xpath | 更新日期: 2023-09-27 18:05:52

如何从下面的xml检索sitename元素值?

<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']");

如何使它不区分大小写?

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

尝试查看这些链接;)

.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')]")'

我也遇到过类似的问题。我可以通过使用名称空间管理器添加名称空间来解决这个问题。

这里有一个类似的问/答:(在c#中使用默认名称空间的Xpath)

希望对你有帮助。