//
al comienzo de una expresión XPath se inicia desde la raíz del documento. Prueba ".//stuffChild". . es una abreviatura de self :: node(), que establecerá el contexto para la búsqueda, y // es una abreviación para el eje descendiente.
Por lo que tiene:
XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");
que se traduce en:
XmlNode stuffChild = stuff.SelectSingleNode ("self :: node()/descendiente :: stuffChild");
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");
En el caso de que el nodo hijo podría tener el mismo nombre que el padre, usted querría usar la sintaxis un poco más detallado que sigue, para asegurar que no vuelva a seleccionar el padre:
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");
también tenga en cuenta que si "stuffChild" es un descendiente directo de "cosas", se puede omitir por completo los prefijos, y sólo tiene que seleccionar "stuffChild".
XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");
El W3Schools tutorial tiene información útil en un formato fácil de digerir.
.//foo es ** no ** igual a descendiente :: foo y en general es una forma ** incorrecta ** de seleccionar nodos descendientes. Consulte http://stackoverflow.com/questions/453191/ –
Quizás se haya perdido el., Que establece el contexto del siguiente XPath. –
Consulte la documentación para la // abreviación. .//foo se traduce a self :: node()/descenddant-or-self :: node()/child :: stuffChild –