因此,在下面使用此代码示例的XML中,我可以从XML成功获取每个条目的HomeAddress和Name信息。如果我还需要从每个条目中获取ID(驾驶执照号码xxx)信息,该怎么办?
编辑:更新了XML示例以进行澄清
代码示例:
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(responseFromServer);
XmlNamespaceManager xnsmgr = new XmlNamespaceManager(xDoc.NameTable);
xnsmgr.AddNamespace("ns1", "http://www.w3.org/2005/Atom");
xnsmgr.AddNamespace("ns2", "http://strange.com/ns/1.0/");
XmlNodeList xnlInsuredListMembers = xDoc.SelectNodes("//ns2:InsuredListMember", xnsmgr);
foreach (XmlNode xnMember in xnlInsuredListMembers)
{
XmlNode xnHomeAddress = xnMember.SelectSingleNode("ns2:HomeAddress", xnsmgr);
string sHomeAddress = xnHomeAddress.InnerText;
XmlNode xnName = xnMember.SelectSingleNode("ns2:Name", xnsmgr);
string sName = xnName.InnerText;
MessageBox.Show(sHomeAddress + sName);
}
XML样本
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>someID</id>
<title type="text">Title</title>
<author>
<name>XML Author</name>
</author>
<updated>2010-10-25T20:05:30.267Z</updated>
<link href="currentURL"></link>
<link href="nextURL"></link>
<entry>
<id>Drivers License Numberxxx</id>
<content type="application/vnd.ctct+xml">
<InsuredListMember xmlns="http://strange.com/ns/1.0/">
<HomeAddress>123 anystreet</HomeAddress>
<Name>doe, somegal</Name>
</InsuredListMember>
</content>
</entry>
<entry>
<id>Drivers License Numberxxx</id>
<content type="application/vnd.ctct+xml">
<InsuredListMember xmlns="http://strange.com/ns/1.0/">
<HomeAddress>321 anystreet</HomeAddress>
<Name>doe, someguy</Name>
</InsuredListMember>
</content>
</entry>
</feed>
最佳答案
首先,根据您的输入样本,该//ns2:ContactListMember
应该为//ns2:InsuredListMember
。
其次,如果上下文节点是某个ns2:InsuredListMember
,则通过以下表达式选择id
属性:@id
。
如果希望给定的ns1:id
为ns1:entry
的ns2:InsuredListMember
子级,请使用以下XPath表达式:../../ns1:id
关于c# - Xpath/C#,从多个 namespace 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027235/