2013-07-28 3 views
0

전 C#에서 사용자 지정하여 XDocument를 만들었으며 그것은 그러나, C#에서 그것을 구문 분석하여 XDocument 분석

<Filters datetimegenerated="28.07.2013 23:12PM"> 
    <SimpleStringFilter column="xxx" table="yyy" groupby="True" seperatereport="true"> 
    good,bad,ugly 
    </SimpleStringFilter> 
    <NumaricalFilter column="zzz" table = "mmm">zzz = 100 or zzz= 50</NumaricalFilter> 
</Filters>  

다음은 내가 StringFilterTags을 구문 분석 할 때 내 코드 여기에 작동하지 않는 것 같습니다 위 샘플에서 0을 얻습니다.

var filters = from simplestringfilter in xdoc.Root.Element("Filters").Elements("SimpleStringFilter") 
          let column = simplestringfilter.Attribute("column") 
          let table = simplestringfilter.Attribute("table") 
          let groupby = simplestringfilter.Attribute("groupby") 
          let seperatecolumnby = simplestringfilter.Attribute("seperatereport") 
          let filterstringval = simplestringfilter.Value 
          select new 
          { 

           Column = column, 
           Table = table, 
           GroupBy = groupby, 
           SeperateColumnBy = seperatecolumnby, 
           Filterstring = filterstringval 
          }; 

무엇이 잘못 되었나요?

+1

루트 요소는 'Filters' 요소입니다. 'Filters' 엘리먼트는'Filters' 자식 엘리먼트를 가지고 있지 않습니다. –

+0

@JeffMercado를 xdoc.Root.Elements ("SimpleStringFilter")로 변경하면 문제가 없습니다. 답변을 추가해 주셔서 감사합니다. – user1590636

답변

2

귀하의 검색어는 루트 요소를 검색하여 자식 요소가 Filters 요소인지 확인합니다. 루트가 요소이므로 Filters 요소는 분명히 실패하므로 어떤 결과도 얻지 못합니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다. Filters을 루트에서 검색하지 마십시오. 그러면 쿼리가 정상적으로 이루어집니다.

var filters = 
    from simplestringfilter in xdoc.Root.Elements("SimpleStringFilter") 
    ... 

IMHO를 작성하는 더 좋은 방법은 루트가 아니라 문서 자체를 쿼리하는 것입니다. 더 자연스러워 보일 것입니다.

var filters = 
    from simplestringfilter in xdoc.Element("Filters") 
            .Elements("SimpleStringFilter") 
    ...