具有XDocument命名空间问题的Linq-to-XML

时间:2012-07-19 07:09:03

标签: c# xml-namespaces linq-to-xml

我有这个XML文档:

<?xml version="1.0" encoding="utf-8"?>
<directoryresponse xmlns="https://www.sisow.nl/Sisow/REST" version="1.0.0">
  <directory>
    <issuer>
      <issuerid>01</issuerid>
      <issuername>ABN Amro Bank</issuername>
    </issuer>
    <issuer>
      <issuerid>02</issuerid>
      <issuername>ASN Bank</issuername>
    </issuer>
  </directory>
</directoryresponse>

这不起作用:

var banks = doc.Descendants("issuer").Select(x => 
    new Bank(Convert.ToInt32(x.Element("issuerid").Value), x.Element("issuername").Value)).ToList();

但是当我手动删除directoryresponse xml命名空间时 xmlns="https://www.sisow.nl/Sisow/REST"它有效!命名空间URL是 404 。那么,为什么xdoc忽略命名空间(如果它是404?

这也不起作用:var banks = doc.Elements().Where(e => e.Name.LocalName == "issuer" ).Select(...

主要问题是:如何修改代码以使其忽略404命名空间?

1 个答案:

答案 0 :(得分:4)

URL本身在这里是无关紧要的 - 它只是命名空间的一个标记,真的。我不相信LINQ to XML会尝试获取它。

但是,您需要使用它构建XName来搜索:

XNamespace ns = "https://www.sisow.nl/Sisow/REST";
var banks = doc.Descendants(ns + "issuer")
               .Select(x => new Bank((int) x.Element(ns + "issuerid"),
                                     (string) x.Element(ns + "issuername"))
               .ToList();