Problema Reading XElement Atributo
-
19-09-2019 - |
Pergunta
Qualquer um sabe por que isso XPath expressão "catzero/@id"
não está trabalhando neste 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
Solução
Você está entrando expressão XPath em Xelement ()?
Para usar XPath você deve tentar http: // msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx
Outras dicas
XPath e Linq-to-XML (XEelement) não costumam corresponder - Linq para XML usos a sua própria abordagem para atravessar documentos XML
.No seu caso, você seria capaz de fazer 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;
}
}
}
Eu não sei da sua pergunta o que você quer fazer com esses elementos e / ou atributos -. Ir em frente e fazer o que você precisa fazer
Escrevendo-o como:
var product = document.XPathSelectElements("//product", nameSpaceResolver).First();
IEnumerable at = (IEnumerable)product.XPathEvaluate("catzero/@id");
var category = at.Cast<XAttribute>().First<XAttribute>().Value;
finas para mim funciona se você esperar que o valor da categoria a ser 20.
Ele funciona muito bem para mim (fixação do F
em First()
, o V
em Value
, e passar um null
namespace-resolver), dando à categoria "20". Você espera algo diferente? Se sim, quais e porquê?
Da mesma forma:
string category = document.Descendants("product").First()
.Elements("catzero").Attributes("id").First().Value;
dá "20".