我有这个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命名空间?
答案 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();