0

"catzero/@id"このxpath式がこの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
4

4 に答える 4

1

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

あなたの質問から、あなたがこれらの要素や属性で何をしたいのかわかりません-ただ先に進んで、あなたがする必要があることは何でもしてください。

于 2010-01-09T16:13:30.470 に答える
1

私にとってはうまく機能し(Fin First()Vinを修正し、名前空間リゾルバーValueを渡すnull)、カテゴリ「20」が与えられます。何か違うことを期待していますか?もしそうなら、何とその理由は?

同じく:

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

「20」を与えます。

于 2010-01-16T08:23:44.553 に答える
1

次のように記述します。

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

カテゴリの値が20であると予想される場合、私にとってはうまく機能します。

于 2010-01-12T21:51:50.240 に答える
0

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

于 2010-01-09T14:40:34.870 に答える