2013-07-20 2 views
0

나는 예를 들어 XML 파일에 다음과 같은 데이터가 있습니다속성에 의해 노드를 찾아 같은 노드에서 다른 속성의 값을 반환

<Critic-List> 
    <bruce-bennett> 
    <Movie Title="White House Down (2013)" Score="C+" Like="false"/> 
    <Movie Title="Despicable Me 2 (2013)" Score="A-" Like="true"/> 
    <Movie Title="World War Z (2013)" Score="B+" Like="true"/> 
    <Movie Title="Man of Steel (2013)" Score="B+" Like="true"/> 

나는 코드를 작성 어떻게을하는

  1. (제목) = "절망적 인 2 (2013)"
  2. 으로 노드를 선택하고 그 선택된 노드에서 그 노드의 다른 속성 값을 부여합니다. 예 : attribute (like) ... 이 경우 "true"를 반환합니다)

C#의 XML 독자는 특성 값보다는 "내부 텍스트"를 반환하는 쪽이 더 적합하다고 생각하지만 XML 데이터를 특성보다는 내부 텍스트에 저장해야하는지 궁금합니다. 속성의 데이터 값을 검색하는 것이 더 편리하지만 이러한 매개 변수가 있는지 확실하지 않습니다. ...

도움이나 제안 된 읽기를 많이 주시면 감사하겠습니다!

+0

시도해 보셨습니까? 그렇다면 시도한 것을 게시하십시오. – Gjeltema

답변

1

결과를 얻기 위해 어떤 방법을 사용하려고하는지 잘 모르겠지만 LINQ to XML은 확실히 그렇게 좋은 방법입니다. XPath를 사용하려는 경우 다음과 같은 결과를 얻을 수 있습니다.

var xml = @"<Critic-List> 
    <bruce-bennett> 
    <Movie Title=""White House Down (2013)"" Score=""C+"" Like=""false""/> 
    <Movie Title=""Despicable Me 2 (2013)"" Score=""A-"" Like=""true""/> 
    <Movie Title=""World War Z (2013)"" Score=""B+"" Like=""true""/> 
    <Movie Title=""Man of Steel (2013)"" Score=""B+"" Like=""true""/>  
    </bruce-bennett> 
    </Critic-List>"; 
XElement doc = XElement.Parse(xml); 

var node = doc.XPathSelectElement("//Movie[@Title='Despicable Me 2 (2013)']"); 
var like = node.Attribute("Like").Value; 

w3schools는 XPath를 일부 자습서를 얻을 수있는 좋은 사이트입니다. 옵션은 항상 시야를 넓히는 좋은 방법입니다.

+0

는 훌륭하게 작동하며 링크에 감사드립니다! –

1

XML을 약간 단순화했는데 아이디어는 같습니다. 첫 번째 단계로 기준을 충족시키는 속성 목록을 작성한 다음 첫 번째 발견 된 요소를 선택합니다.

const string myXml = @"<Critic-List> 
            <Movie Title='White House Down (2013)' Score='C+' /> 
            <Movie Title='Despicable Me 2 (2013)' Score='A-' /> 
            <Movie Title='World War Z (2013)' Score='B+' /> 
            <Movie Title='Man of Steel (2013)' Score='B+' /> 
         </Critic-List>"; 

    var el = XElement.Parse(myXml); 
    var q1 = el.Elements() 
       .Select(n => (n.Attribute("Title").Value == "Despicable Me 2 (2013)") ? n.Attribute("Score") : null) 
       .First(n => n != null); 
1

이 같은 XML로 LINQ를 사용할 수 있습니다

XElement doc = XElement.Load("File.xml"); 
var node = (from e in doc.Elements() 
    where (string)e.Attribute("Title") == "Despicable Me 2 (2013)" 
    select e).SingleOrDefault; 

var like = (bool)node.Attribute("Like"); 
1

이 꽤 깨끗한 방법입니다.

XElement ele = XElement.Parse(movieXml); 
string movie = "Despicable Me 2 (2013)"; 
string answer = ele.Descendants("Movie") 
        .Where(x => x.Attribute("Title").Value == movie) 
        .Select(x => x.Attribute("Like").Value) 
        .FirstOrDefault(); 
관련 문제