Это мой тестовый XML-документ:
<?xml version="1.0" encoding="utf-8" ?>
<foos>
<foo>
<bar>
<bazs>
<baz>baz1</baz>
<baz>baz2</baz>
<baz>baz3</baz>
</bazs>
</bar>
</foo>
<!--there will be other foo nodes with same structure but different number of baz nodes-->
</foos>
В этом документе каждый узел <foo>
имеет один узел <bar>
, а каждый узел <bar>
имеет список <baz>
узлов.Я хочу достичь этих <baz>
узлов от каждого <bar>
.Это мой код:
using System;
using System.Xml;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load("test.xml");
XmlNodeList fooNodes = xmlDocument.SelectNodes("/foos/foo");
foreach(XmlNode fooNode in fooNodes)
{
XmlNode barNode = fooNode.SelectSingleNode("bar");
var bazNodes1 = fooNode.SelectNodes("/bar/bazs/baz");
var bazNodes2 = fooNode.SelectNodes("bar/bazs/baz");
var bazNodes3 = barNode.SelectNodes("/bazs/baz");
Console.WriteLine($"Method 1 returned {bazNodes1.Count} nodes.");
Console.WriteLine($"Method 2 returned {bazNodes2.Count} nodes.");
Console.WriteLine($"Method 3 returned {bazNodes3.Count} nodes.");
}
Console.Read();
}
}
}
, который выдает:
Method 1 returned 0 nodes.
Method 2 returned 3 nodes.
Method 3 returned 0 nodes.
Здесь я немного запутался с использованием /
при адресации узлов.Хотя получение fooNodes
из корня документа работает с /foos/foo
как xpath
, но я не могу получить bazNodes
, используя /bar/bazs/baz
от узла <foo>
, что странно для меня.И я также застрял с получением bazNodes
от узла <bar>
, что я думаю, потому что я не знаю правильный синтаксис.Итак, мои вопросы:
- Когда я должен включать ведущие
/
при адресации узлов? - Как я могу получить
<baz>
узлов от узла <bar>
в этом примере?