2012-10-09 2 views
0

파일에서 XML 문서를 쿼리 할 수는 있지만이 XML 코드 조각에서 단 하나의 "필터"노드 만 가져올 필요가 있습니다 (물론 자식 노드와 함께) 내 C# 방법으로 전달되는 "ID"를 기반으로 :내 Linq to 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 코드를 모델링,하지만 어떻게 간단히 말해서 나는 단지 필터를 당길 것인가?

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

사람 만 당겨이 조금 조정에 좀 도와 줄래 :

 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") 
             )); 

그러나, 내가 내 최종 결과로 얻는하고있어이 같은 상단에 EXTRA "필터"노드입니다 "필터"노드, "id"속성을 기반으로해야합니까?

감사합니다. Bob

답변

1

최상위 필터 요소를 만들고 하위 필터 요소를 선택하고 만듭니다. 어떻게 당신이 이런 식으로 필요한 선택에 대한 :

var portFilt = from x in document.Descendants("filter") 
       where (string)x.Element("name") == filterName 
       select x; 
+0

VAR pfFilter = X에서 document.Descendants에() 곳 x.Name == "필터"&& x.Element ("이름"). Value.Equals (filterName) select x; –

+0

어떻게 코드를 강조 표시합니까? thx –

+0

일반적으로 오른쪽 서식을 지정하면 강조 표시됩니다. 자세한 내용은 http://stackoverflow.com/editing-help#syntax-highlighting에서 확인하십시오. 'select x;'를 추가하여 쿼리를 수정했습니다. -'x.Element ("name") 대신'(string) x.Element ("name")'을 사용하고 싶습니다 .Value'를 사용하면 NullReferenceExceptions를 피할 수 있습니다. 이름이 존재하지 않습니다. (백틱 (')) – Pawel