0

ファイルからXMLドキュメントをクエリすることができましたが、C#に渡される「id」に基づいてこのXMLスニペットから(もちろんその子ノードとともに)1つの「フィルター」ノードをプルするだけで済みます。方法:

  <outBound>
   <body>
       <filter id="1">
          <name>A. All Portfolios</name>
          ...
          <query>
              ...
          </query>
       </filter>
       <filter id="2">
          <name>A. Busines Portfolios</name>
          ...
          <query>
              ...
          </query>
       </filter>
   </body>
  </outBound>

ダウンロードしたいくつかのMSサンプルからL2Xコードをモデル化しましたが、フィルターのみをプルするにはどうすればよいですか?

        XDocument document = XDocument.Load(Server.MapPath("~/xml/portfolioFilters.xml"));  //portfolioFiltersResponse  //portfolioFilters            
        var portFilterAll = from x in document.Descendants()
                         where x.Name == "filter"
                         select x;

        var portFilt = new XElement("filter",
                            from x in document.Descendants("filter")
                            where (string)x.Element("name") == filterName
                            select new XElement("filter",
                                        x.Attribute("id"),
                                        x.Element("name"),
                                        x.Element("type"),
                                        x.Element("userId"),
                                        x.Element("security"),
                                        x.Element("queries")
                                       ));

ただし、最終結果として得られるのは、次のような追加の「フィルター」ノードです。

   <filter>
     <filter id="1">
       <name>A. All Portfolios</name>
       ...
       <query>
          ...
       </query>
     </filter>
   </filter>

誰かがこれを少し調整して、「id」属性に基づいて必要な「フィルター」ノードのみをプルするのを手伝ってもらえますか?

ありがとうございました。ボブ

4

1 に答える 1

1

トップレベルのフィルター要素を作成し、子フィルター要素を選択して作成します。このように必要なものを選択するのはどうですか?

var portFilt = from x in document.Descendants("filter")
               where (string)x.Element("name") == filterName
               select x;
于 2012-10-09T16:29:04.867 に答える