2012-06-27 11 views
18

Me gustaría consultar un objeto XDocument para una ruta determinada (por ejemplo, "/ ruta/a/elemento/I/querer") pero no sé cómo proceder.¿Cómo puedo consultar un XDocument con una 'ruta'?

+0

posible duplicado de [cómo usar XPath con XDocument?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –

+0

Puede ver un ejemplo seleccionando diferentes rutas, con/sin definiciones de espacio de nombres, etc. aquí: http://stackoverflow.com/a/38272604/5838538. – Jelgab

Respuesta

2

soemthing similar a esto podría funcionar:

var path = "/path/to/element/I/want"; 
var route = path.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries); 

XElement result = null; 
foreach (var node in route) 
{ 
    if (result == null) 
    { 
     result = _xmlDocument.Element(node);  
    } 
    else 
    { 
     result = result.Element(node); 
    } 
} 

return result; 
+1

'RemoveEmptyEntries' no es una buena idea,' // 'tiene un significado específico en XPath y es para buscar todos los descendientes. – svick

41

Puede utilizar los métodos de System.Xml.XPath.Extensions para hacer esto.

Por ejemplo, si desea seleccionar un solo elemento, se usaría XPathSelectElement():

var element = doc.XPathSelectElement("/path/to/element/I/want"); 

Las consultas no tienen que ser rutas simples como lo que usted describe, que utilizan el lenguaje XPath.

+6

En 4.5, use System.Xml.XPath. – lionheart

+6

@lionheart ¿No es eso exactamente lo que sugerí? Y el espacio de nombres 'System.Xml.XPath' ciertamente no es nuevo en .Net 4.5. – svick

4

A pesar de que este es un post un poco mayores, cabe señalar que LINQ-to-XML se puede utilizar como una alternativa a System.XML.XPath para encontrar los elementos basados ​​en un camino dentro de un XDocument

Ejemplo:

var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault(); 

Nota: Es posible que sea necesario modificar el comando LINQ to XML para acomodar la estructura real y/o cardinalidad del XML.

https://msdn.microsoft.com/en-us/library/bb675156.aspx

0

que tenía que hacer algo similar. Este repo tiene varias pruebas unitarias que muestran XDocument consultando con XPathEvaluate()

Cuestiones relacionadas