0

次のような XML ファイルがあります。

<?xml version="1.0" encoding="utf-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"> 
  <AllThingsInThisDocument> 
    <Headerstuff>
       <Date>2013-06-11</Date>
    </Headerstuff>
    <Reports>
      <Report>
        <Id>01</Id>
        <Name>AA</Name>
      </Report>
      <Report>
        <Id>02</Id>
        <Name>BB</Name>
      </Report>
      <Report>
        <Id>03</Id>
        <Name>CC</Name>
      </Report>
    </Reports>
  </AllThingsInThisDocument> 
</Document> 

私がやりたいことは、すべてのレポートをループすることです。そのために次のコードを使用します。

Dim xmlr As XDocument = XDocument.Load("MyMxlFile.xml")
For Each report As XElement In xmlr.Descendants("Report")
   'Do some cool stuff
Next

これはうまくいきません。私が見つけたのは、これ<Document>を台無しにするのはタグだということです。これらのタグを削除すると、やりたいことを理解してくれます。理由を知っている人はいますか?

編集:まあ、それがで動作することもわかりました<Document>。この場合、それを台無しにするのはxmlnsです。これを修正する理由および/または方法を知っている人はいますか? エラーは発生しませんが、ループの結果として null が返されます。

4

1 に答える 1

0

XML ドキュメントは名前空間を使用するため、LINQ to XML クエリ内で使用する必要があります。

まず、XNamespace共有XNamespace.Get()メソッドを使用してインスタンスを作成します。

Dim ns = XNamespace.Get("urn:iso:std:iso:20022:tech:xsd:pain.008.001.02")

そして、XNamespace + string演算子を使用してクエリで使用します。

For Each report As XElement In xmlr.Descendants(ns + "Report")
   ' Do some cool stuff '
Next
于 2013-08-16T14:03:28.007 に答える