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