문제

누구나이 xpath 표현을 알고 있습니다 "catzero/@id" 이것에 대해 작업하지 않습니다 XML

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
도움이 되었습니까?

해결책

xpath 표현식을 xelement ()에 입력하고 있습니까?
XPath를 사용하려면 시도해야합니다 http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

다른 팁

XPath 및 LINQ-to-XML (Xeelement)은 일반적으로 일치하지 않습니다. LINQ-to-XML은 XML 문서를 가로 지르는 자체 접근 방식을 사용합니다.

귀하의 경우에는 다음과 같은 작업을 수행 할 수 있습니다.

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;
        }
    }
}

나는 당신의 질문에서 당신이 이러한 요소 및/또는 속성으로 무엇을하고 싶은지 모르겠습니다. 계속해서해야 할 일을하십시오.

작성 :

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

카테고리의 가치가 20이 될 것으로 예상하면 나에게 잘 작동합니다.

그것은 나를 위해 잘 작동합니다 (고정 F 안에 First(),, V 안에 Value, 그리고 전달 a null "20"카테고리를 제공하는 네임 스페이스-재석정). 당신은 다른 것을 기대합니까? 그렇다면 무엇과 왜?

비슷하게:

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

"20"을 준다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top