c# - Xpath/C#,从多个 namespace 获取数据

标签 c# xml xpath

因此,在下面使用此代码示例的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:idns1:entryns2:InsuredListMember子级,请使用以下XPath表达式:../../ns1:id

关于c# - Xpath/C#,从多个 namespace 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027235/

相关文章:

c# - 如何将 WriteAsync 与 XPSDocument 一起使用?

c# - 如何使用 C# 清除网络接口(interface) (nic) 的默认网关

c# - 将 Azure Key Vault key 传递给 Blazor 应用程序中的 Services.Configure

jquery - 无法获取类似 XML 的字符串来在 Jquery 中解析

xml - XPath - 复合谓词 + 测试值是否不以某物开头

PHP Xpath : How to get the action URL from any method on a WSDL?

c# - 在 C# 中使用 F# 数据类型

python - 如何通过脚本从 XMI 正确导入一个完整的 Enterprise Architect 项目?

c# - 如何遍历所有 XElement 属性并获取它们的值

python - Div文字,但排除一些标签文字