0

重複の可能性:
XDocument がこのウェルフォーム XML テキストから要素を取得できないのはなぜですか?

linq to xml を使用して xml を読み取ろうとしていますが、何か問題があることを理解していると思います。これはxmlの始まりです(長いのですべてを掲載していません)

<?xml version="1.0" encoding="utf-8"?>
   <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
      <Body>
         <ReportItems>
             <Tablix Name="Tablix12">
              ......
              ......
             </Tablix>

この xml にはいくつかの「Tablix」要素が含まれている可能性があり、1 つまたはまったく含まれていない可能性があります。これらのそれぞれについて、このタグ内の内容を読みたいのですが、開始するのが困難です。

「Tablix」要素またはその他の要素を取得する方法をいくつか試しました。このコードでは、「var root」の結果のみが得られます。残りは常に null であり、何が間違っているのかわかりません。

    public ReadTablixResponse ReadTablixAdvanced(string rdl)
    {
        XDocument xml = XDocument.Parse(rdl);

        var root = xml.Root;
        var Body = xml.Root.Element("Body");
        var report = xml.Root.Element("Report");
        var aa = xml.Element("Report");
        var bb = xml.Element("Body");
        var test = xml.Elements("Tablix");
4

2 に答える 2

2

私が気づいたことの 1 つは、メソッドを使用したことですElement("name")。指定された XName を持つ最初の (ドキュメント順で)直接の子要素を常に再実行しようとします。それがおそらくあなたがnullを得た理由です。

(見ている場所から)より深い要素を返したい場合。すべての子孫要素のコレクションを返す Descendants("name") メソッドを使用する必要があります。それらがどんなに深くても(選択したアンカーに対して)...

例えば:

 XNamespace xNameSpace = "http://schemas.micro.....";
 // ...
 var tablixes= xml.Descendants(xNameSpace + "Tablix");

その後、次の手順を実行できます。

foreach (var tablix in tablixes)
{
    var name=(string)tablix.Attribute("Name");
    var age=(int)tablix.Element("age");
   ...

}
于 2013-01-31T09:05:07.367 に答える
1
        XDocument xDocument = XDocument.Parse(rdl);
        XNamespace xNameSpace = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";
        var tablixes= from o in xDocument.Descendants(xNameSpace + "Tablix")
                    select o.Value;
于 2013-01-31T08:28:45.480 に答える