wtorek, 1 września 2009

Programowanie: użycie wyszukiwnia XPath dla XML

Kilka dni temu miałem do rozwiązania zadanie związane z XML.
Chciałem w praktyce zastosować wyszukiwanie XPath.
Generalnie lubię XML, więc myślałem że zadanie nie sprawi mi problemów.
Już po chwili mózg mi się gotował :)

Konkretnie: miałem XML, który można uprościć do postaci:


<persons>
<men>
<feature class="surename">Smith</feature>
<feature class="age">36</feature>
</men>
<men>
<feature class="surename">Kowalski</feature>
<feature class="age">40</feature>
</men>
<persons>


W XMLu widzimy dwie osoby, każda posiada nazwisko (surename) i wiek (age).
Chciałem uzyskać wiek osoby o nazwisku 'Kowalski'.
Problem okazał się trudniejszy niż myślałem dlatego przekazuje go potomności :))

Więc jakie jest zapytanie XPath jeśli chcę otrzymać wiek Kowalskiego?

Takie:
//persons/men/feature[ @class='age' and preceding-sibling::*[attribute::class='surename'] = 'Kowalski' ]

Prawda że proste? :) Niestety nie...




Implementacja w .NET jest mniej więcej taka:

XPathDocument document = new XPathDocument("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathExpression expression1 = XPathExpression.Compile("//persons/men/feature[ @class='age' ]");

XPathNodeIterator nodes = navigator.Select(expression);
if( expression.ReturnType == XPathResultType.NodeSet )
{
while (nodes.MoveNext())
{
Console.WriteLine(nodes.Current.ToString());
}
}


Brak komentarzy:

Prześlij komentarz

Obserwatorzy