2014-12-18 2 views
0

다음 XML 파일이 있는데 두 요소 안에있는 특성 값을 가져 오려고합니다.두 요소 내 xml 파일 특성 읽기

XML :

<Var> 
    <Sour> 
    <Processing> 
     <Interpolation method="akimaspline"/> 
     <Aggregation method="summation" /> 
    </Processing> 
    </Sour> 
</Var > 

C 번호 :

XmlDocument doc = new XmlDocument(); 
doc.Load(xmlFile); 
XmlNodeList elemNode = doc.GetElementsByTagName(Aggregation); 
for (int y = 0; y < elemNode.Count; y++) 
    result = elemNode[y].Attributes[method].Value; 

다음 코드는 요약 대신 빈 문자열을 반환합니다. -

+1

각 루프 반복에서 '결과'변수를 다시 할당합니다. '집계'및 '방법'변수에는 어떤 값이 있습니까? LINQ를 사용할 수 있습니까? –

+0

글쎄, 집계 태그를 찾을 수 없으며 LINQ가 훌륭 하겠지만 전문가가 아닙니다. – Doro

답변

2

Linq to Xml 접근 각 요소에서 속성 값을 '방법'(둘 집계 및 보간에게 제공) 루트 아래의 모든 요소를 ​​얻을 수 :

var xdoc = XDocument.Load(xmlFile); 
var methods = xdoc.Root.Elements() 
        .Select(e => (string)e.Attribute("method")) 
        .Distinct(); 

출력 :

[ "summation", "linear" ] 

얻기 값을 개별적으로 :

var aggregationMethod = (string)xdoc.Root.Element("Aggregation").Attribute("method"); 

업데이트 : xml을 변경 한 후에 Processing은 더 이상 파일의 루트가 아닙니다. 단지 당신은 경로

var method = (string)xdoc.Descendants("Aggregation").First().Attribute("method"); 

를 지정하지 않고 Aggregation 요소를 찾기 위해 Descendants을 사용할 수있는 루트

var method = (string)xdoc.Root.Element("Sour") 
         .Element("Processing") 
         .Element("Aggregation").Attribute("method"); 

에서 수동으로 모든 요소를 ​​선택하거나 당신은 전체 또는 상대 경로를 지정하는 XPath를 사용할 수 있습니다 - 당신은 지금 몇 가지 옵션이 있습니다 '집계'요소 :

var method = (string)xdoc.XPathSelectElement("//Aggregation").Attribute("method"); 
+0

하지만 원하는 태그 집계에만 합계 및 태그 보간 선형입니다. – Doro

+0

@doro 집계에 대한 요약 만하면 무엇을 의미하는지 설명해 주시겠습니까? 이 값들을 따로 얻고 싶습니까? –

+0

좋아요, 태그 집계를 검색하면 역산이 필요합니다. 태그 보간을 검색하면 선형이 필요합니다. – Doro