2011-08-05 11 views
11

Quiero limitar la búsqueda de un nodo secundario para que esté dentro del nodo actual en el que estoy. Por ejemplo, tengo el siguiente código:Sintaxis de XmlNode.SelectSingleNode para buscar dentro de un nodo en C#

XmlNodeList myNodes = xmlDoc.DocumentElement.SelectNodes("//Books"); 
    foreach (XmlNode myNode in myNodes) 
    { 
     string lastName = ""; 
     XmlNode lastnameNode = myNode.SelectSingleNode("//LastName"); 
     if (lastnameNode != null) 
     { 
       lastName = lastnameNode.InnerText; 
     } 
    } 

Quiero el elemento LastName que se debe buscar dentro de la corriente miNodo interior del foreach. Lo que está sucediendo es que el Apellido encontrado siempre es desde el primer nodo con myNodes. No quiero codificar la ruta exacta de LastName, sino permitir que sea flexible con respecto a dónde se encontrará dentro de myNode. Hubiera pensado que el uso del método SelectSingleNode en myNode habría limitado la búsqueda a estar solo dentro del contenido xml de myNode y no incluir los nodos principales.

Respuesta

27

Un // líder siempre comienza en la raíz del documento; .// utilizar para empezar en el nodo actual y buscar simplemente sus descendientes:

XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName"); 
+0

El "" Funcionó muy bien. ¿Sabes dónde se puede encontrar esa sintaxis? Busqué este tipo de información y encontré el "//" pero no el "." Estoy pensando que hay otra sintaxis que puedo usar. – user31673

+0

[sintaxis XPath] (http://www.w3schools.com/xsl/xpath_syntax.asp) –

+0

Enlace actualizado a la sintaxis de XPath que @ ibo.ezhe mencionó: https://www.w3schools.com/xml/xpath_syntax.asp – PolyTekPatrick

1

En realidad, el problema se relaciona con XPath. XPath syntax // significa selecciona los nodos en el documento del nodo actual que coincidan con la selección sin importar dónde se encuentren

así que todo lo que necesita es cambiar a

myNode.SelectSingleNode(".LastName") 
+0

Esto solo lo encontrará un nivel abajo. El OP dijo que quería que lo encontrara en cualquier lugar dentro del subárbol. –

Cuestiones relacionadas