我有一个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个节点,请提供帮助。
您需要为查询的每个元素指定名称空间,因为默认名称空间也适用于子节点。我已将示例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个节点。
这里是另一种方式
var clients = XElement.Parse(xmlContent)
.Descendants(XName.Get("personal_client", "http://www.origoservices.com"));