// - na co wskazuje?

0

Z w3c:

Selects nodes in the document from the current node that match the selection no matter where they are

Załóżmy, że mamy xmla:

<root>
    <book id="1" />
    <book id="2" />
    <books>
        <container>
            <book id="3" />
            <book id="4" />
        </container>
    </books>
</root>

Często zdarza mi się stosować takie coś:

XmlNode books = xml.SelectNode("root/books");
foreach (XmlNode book in books.SelectNodes("//book")
{ ... }


Wg mnie powyższe powinno zwrócić dwa węzły book - o id 3 i 4. Czasem tak jest.
Właśnie przed chwilą jednak w podobnym przypadku dostałam wszystkie 4 węzły book...

Ja rozumiem, że tam jest "no matter where they are", no ale "from the current node", co nie?

Czy znacie sposób, jak pobrać wszystkich potomków (niekoniecznie bezpośrednich) danego węzła, o podanej nazwie?
2

Wydaje mi się że chodzi Ci o coś takiego:

static void Main(string[] args)
{
    XmlDocument xd = new XmlDocument();
    xd.LoadXml(@"
    <root>
    <book id=""1"" />
    <book id=""2"" />
    <books>
        <container>
            <book id=""3"" />
            <book id=""4"" />
        </container>
    </books>
    </root>");

    XmlNode books = xd.SelectSingleNode("root/books");
    foreach (XmlNode book in books.SelectNodes(".//book"))
    {
        Console.WriteLine(book.Attributes["id"].Value);
    }

    Console.ReadKey(true);
}
0
aurel napisał(a):

Ja rozumiem, że tam jest "no matter where they are", no ale "from the current node", co nie?

Czy znacie sposób, jak pobrać wszystkich potomków (niekoniecznie bezpośrednich) danego węzła, o podanej nazwie?

Właśnie ten "dany węzeł, o podanej nazwie" to jest current node, a "no matter where they are" oznacza tyle, że to są węzły poniżej tego current, niekoniecznie bezpośrednio poniżej. Tak więc jeżeli current to root wtedy wybierze się 4 węzły, a jeżeli books, to tylko 2. Symbol "//" oznacza właśnie to, że ścieżka pomiędzy może być dowolna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1