Problema de lectura XElement Atributo
-
19-09-2019 - |
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
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".