2010-01-09 8 views
0

사람이 XPath 식 "catzero/@id"가) (XElement를에 당신이 XPath 식을 입력하고 있습니까이 xml문제 독서 XElement를이

document = XDocument.Load("file.xml"); 
var product = document.XPathSelectElements("//product", nameSpaceResolver).First(); 
var category = ((IEnumerable) product.XPathEvaluate("catzero/@id")).Cast<XAttribute>().first().value; //catezero/@id is null 
+0

샘플 코드를 제공하고 무슨 일이 일어나고 있는지 설명하십시오. "작동하지 않습니다"는 매우 설명 적이 지 않습니다. –

+1

괜찮아. .. – h3n

답변

1

XPath를 시도해야하고 Linq에 - 투 - XML ​​(XEelement)는 일반적으로 일치하지 않는 XPath는을 사용합니다.

귀하의 경우에는

, 당신은 같은 것을 할 수있을 것입니다 :이 요소로 할 수 및/또는 속성 제가 질문에서 모르는

XDocument doc = XDocument.Load("http://www.quillarts.com/Test/Feed2.xml"); 

foreach(XElement xe in doc.Descendants("product")) 
{ 
    if(xe.Element("catzero") != null) 
    { 
     var attr = xe.Element("catzero").Attribute("id"); 

     if(attr != null && attr.Value == "20") 
     { 
      string elementValue = xe.Value; 
     } 
    } 
} 

- 단지 진행을하고 네가해야 할 일을 다해라. VValue에, 당신이 카테고리의 값이 20

1

로 작성 , null namespace-resolver를 전달하여 카테고리를 "20"으로 지정합니다. 뭔가 다른 것을 기대합니까? 그렇다면 무엇과 왜? 마찬가지로

는 :

string category = document.Descendants("product").First() 
      .Elements("catzero").Attributes("id").First().Value; 

는 "20"을 제공한다.

1

그것은 나를 위해 잘 작동합니다 (FFirst()에 고정 될 것으로 기대하는 경우

var product = document.XPathSelectElements("//product", nameSpaceResolver).First(); 
IEnumerable at = (IEnumerable)product.XPathEvaluate("catzero/@id"); 
var category = at.Cast<XAttribute>().First<XAttribute>().Value; 

나를 위해 잘 작동 :