0

我已经设法从一个文件中查询一个 XML 文档,但是我只需要根据传递给我的 C# 的“id”从这个 XML 片段(当然还有它的子节点)中提取一个“过滤器”节点方法:

  <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 回答