Ответ 1
//
в начале выражения XPath начинается с корня документа. Попробуйте ".//stuffChild"., является сокращением для self:: node(), который задает контекст для поиска, а//является сокращением для оси потомка.
Итак, у вас есть:
XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");
что соответствует:
xmlNode stuffChild = stuff.SelectSingleNode( "self:: node()/descendant:: stuffChild" );
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");
В случае, если дочерний элемент node может иметь то же имя, что и родительский, вы должны использовать следующий более подробный синтаксис, чтобы убедиться, что вы не повторно выбираете родителя:
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");
Также обратите внимание, что если "stuffChild" является прямым потомком "материала", вы можете полностью опустить префиксы и просто выбрать "stuffChild".
XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");
W3Schools учебник содержит полезную информацию в удобном для чтения формате.