나는

2012-11-30 2 views
2

내 XML이처럼 보이는 영문 제어에 XML 파일과 출력을 단일 요소를 읽을 수나는

string productID = 1; 
XDocument productsXML = XDocument.Load("Products.xml"); 
for item in productsXML { 
    if (item.ID == productID) { 
     productNameLabel.Text = item.name; 
    } 
} 

아이디어는 .aspx 페이지에 하나의 xml 하위 요소를 출력 할 수 있습니다.

A thing 

의미가 있습니까? 나는 몇 시간 동안 예제를 찾고 있었고, 내가 필요로하는 더 많은 스캐 폴딩이 있다고 생각하기 시작했다. 그러나 모든 예제가 너무 다르기 때문에 어느 것을 따라야할지 모르겠다!

그래서 어떻게 하나의 XML 하위 요소의 내용을 잡고 .aspx로 출력 할 수 있습니까? 이것을 가지고 :

<product id="1"> 
    <name>A thing</name> 
    <description>This is what it's like</description 
</product> 

및 출력이 : 그것은 때문에

A thing 

답변

2

당신은 (System.Xml.XPath에서) XPath를 사용할 수 있습니다

string value = productsXML.XPathSelectElement("//product[@id='1']/name").Value; 
0

을이 경우에, 나는 LB의 대답에 동의 오히려 간단합니다. 이 문서에있는 모든 제품 노드를 가져옵니다

XDocument productsXML = XDocument.Load("Products.xml"); 
     string item = productsXML.Elements("product") 
           .Where(p => p.Attribute("id").Value == productID) 
           .First() 
           .Element("name").Value; 

productsXML.Elements("product") : 당신이 Linq에를 좋아하는 경우에, 여기에 대체 솔루션입니다 (난 당신이 XML 객체에 Linq에 인하여 XDocument를 사용하고주의).
.Where(p => p.Attribute("id").Value == productID) 그러면 제품과 일치하는 id의 제품 노드 만 가져옵니다.
.First().Where 함수는 노드 모음을 반환하므로 첫 번째 노드를 가져옵니다.
.Element("name").Value; 제품 노드에서 name이라는 요소를 찾아 값을 반환합니다.

단순한 스키마의 경우 XPath는 훨씬 덜 복잡하지만 처음에는 XPath를 모르는 경우 이해하기가 약간 어려워 보입니다. Linq는 훨씬 많은 코드 라인 (이 경우)이지만 XPath를 모른다면 훨씬 더 읽기 쉽습니다.