質問

誰でも知っている、この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
役に立ちましたか?

解決

あなたは()のXElementにXPath式を入力している?
Xpathを使用するに試してみてくださいます。http:// msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspxする

他のヒント

のXPathとLINQのツーXML(XEelement)は、一般的に一致していない - LINQのツー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であることを予想される場合、

は、私のために立派に動作します。

これは、カテゴリ「20」を与え、(FFirst()VValueを固定し、nullの名前空間リゾルバを渡す)私のために正常に動作します。あなたが別の何かを期待していますか?もしそうなら、何を、なぜ?

同様ます:

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

"20" 与えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top