Pregunta

Alguien sabe por qué esto XPath expresión "catzero/@id" no está funcionando en este 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
¿Fue útil?

Solución

¿Está introduciendo la expresión XPath en XElement ()?
Para usar Xpath se debe tratar http: // msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

Otros consejos

XPath y LINQ to XML (XEelement) por lo general no coinciden - LINQ to XML utiliza su propio método para atravesar documentos XML

.

En su caso, usted sería capaz de hacer algo como:

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

No sé de su pregunta lo que quiere hacer con estos elementos y / o atributos -. Simplemente seguir adelante y hacer lo que tiene que hacer

La escritura como:

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

me da buenos resultados si espera que el valor de la categoría a ser 20.

Funciona bien para mí (la fijación de la F en First(), la V en Value, y pasando un espacio de nombres null-resolver), dando a la categoría de "20". Qué se puede esperar algo diferente? Si es así, qué y por qué?

Del mismo modo:

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

da "20".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top