XML名称空间问题C#

问题描述 投票:0回答:2

我有一个XML,我试图从XmlDocument中获取该节点,但是由于某些命名空间问题,它没有使我返回想要的节点。

以下是我的XML。

<?xml version="1.0" encoding="iso-8859-1"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.origoservices.com">
  <content>
    <application>
      <personal_client id="pc1">
        <title>Mr</title>
        <forenames>Test</forenames>
        <surname>SurName</surname>
        <sex>Male</sex>
      </personal_client>
      <personal_client id="pc2">
        <title>Mr</title>
        <forenames>Test</forenames>
        <surname>SurName</surname>
        <sex>Male</sex>
      </personal_client>
      <personal_client id="pc3">
        <title>Mr</title>
        <forenames>Test</forenames>
        <surname>SurName</surname>
        <sex>Male</sex>
      </personal_client>
    </application>
  </content>
</message>

下面是我用来从上述xml中获取所有personal_client节点的C#代码。

XmlDocument XMLDoc = new XmlDocument();
XMLDoc.PreserveWhitespace = true;
XMLDoc.Load("XML Loaded successfully");

XmlNamespaceManager nsmgr = new XmlNamespaceManager(XMLDoc.NameTable);
nsmgr.AddNamespace("origo", "http://www.origoservices.com");
nsmgr.PushScope();

XmlNodeList xnList = XMLDoc.SelectNodes("//origo:message/m_content/application/personal_client", nsmgr);

一直返回0个节点,请提供帮助。

c# xml xmldocument
2个回答
1
投票

您需要为查询的每个元素指定名称空间,因为默认名称空间也适用于子节点。我已将示例XML放在名为XmlFile1.xml的文件中,并创建了以下示例:

var XMLDoc = new XmlDocument();
XMLDoc.Load("XmlFile1.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(XMLDoc.NameTable);
nsmgr.AddNamespace("origo", "http://www.origoservices.com");
XmlNodeList xnList = XMLDoc.SelectNodes("//origo:message/origo:content/origo:application/origo:personal_client", nsmgr);

此代码检索3个节点。


0
投票

这里是另一种方式

var clients = XElement.Parse(xmlContent)
               .Descendants(XName.Get("personal_client", "http://www.origoservices.com"));
© www.soinside.com 2019 - 2024. All rights reserved.