2

私はこの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名前空間を無視するようにコードを変更するにはどうすればよいですか?

4

1 に答える 1

4

ここでは、URL自体は関係ありません。実際には、URLは名前空間の単なるトークンです。LINQtoXMLがそれをフェッチしようとは思わない。

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();
于 2012-07-19T07:13:07.687 に答える