MySQL Java JavaScript PHP Python HTML-CSS C-sharp

XPath

XPath reprezintă un limbaj de interogare în XML. Acesta permite selectarea elementelor care corespund unui anumit selector.

Să analizăm câțiva dintre cei mai des utilizați selectori:

  • .: selecția nodului curent
  • ..: selecția nodului părinte
  • *: selecția tuturor nodurilor copii ale nodului curent
  • person: selecția tuturor nodurilor cu un anumit nume, în acest caz cu numele "person"
  • @name: selecția atributului nodului curent, după semnul @ se indică numele atributului (în acest caz "name")
  • @*: selecția tuturor atributelor nodului curent
  • element[3]: selecția unui anumit nod copil după index, în acest caz al treilea nod
  • //person: selecția în document a tuturor nodurilor cu numele "person"
  • person[@name='Tom']: selecția elementelor cu o anumită valoare a atributului. În acest caz, sunt selectate toate elementele "person" cu atributul name='Tom'
  • person[company='Microsoft']: selecția elementelor cu o anumită valoare a unui element încorporat. În acest caz, sunt selectate toate elementele "person" al căror element copil "company" are valoarea 'Microsoft'
  • //person/company: selecția în document a tuturor nodurilor cu numele "company" care se află în elementele "person"

Funcționarea interogărilor XPath se bazează pe utilizarea a două metode ale clasei XmlElement:

  • SelectSingleNode(): selecția unui singur nod din rezultatele interogării. Dacă interogarea returnează mai multe noduri, este selectat primul
  • SelectNodes(): selecția unei colecții de noduri ca obiect XmlNodeList

Pentru interogări, vom lua documentul XML din temele anterioare:

<?xml version="1.0" encoding="utf-8" ?>
<people>
 <person name="Tom">
   <company>Microsoft</company>
   <age>37</age>
 </person>
 <person name="Bob">
   <company>Google</company>
   <age>41</age>
 </person>
</people>

Acum vom selecta toate nodurile elementului rădăcină, adică toate elementele person:

using System.Xml;

XmlDocument xDoc = new XmlDocument();
xDoc.Load("people.xml");
XmlElement? xRoot = xDoc.DocumentElement;

// selecția tuturor nodurilor fiice
XmlNodeList? nodes = xRoot?.SelectNodes("*");
if (nodes is not null)
{
   foreach (XmlNode node in nodes)
       Console.WriteLine(node.OuterXml);
}

Afișarea în consolă:

<person name="Tom"><company>Microsoft</company><age>37</age></person>
<person name="Bob"><company>Google</company><age>41</age></person>

Vom selecta toate nodurile <person>:

XmlNodeList? personNodes = xRoot?.SelectNodes("person");

Vom afișa în consolă valorile atributelor name ale elementelor person:

using System.Xml;

XmlDocument xDoc = new XmlDocument();
xDoc.Load("people.xml");
XmlElement? xRoot = xDoc.DocumentElement;
XmlNodeList? personNodes = xRoot?.SelectNodes("person");
if(personNodes is not null)
{
   foreach (XmlNode node in personNodes)
       Console.WriteLine(node.SelectSingleNode("@name")?.Value);
}

Rezultatul afișat va fi:

Tom
Bob

Vom selecta nodul al cărui atribut name are valoarea "Tom":

XmlNode? tomNode = xRoot?.SelectSingleNode("person[@name='Tom']");
Console.WriteLine(tomNode?.OuterXml);

Să presupunem că trebuie să obținem doar companiile. Pentru aceasta, trebuie să facem o selecție în josul ierarhiei elementelor:

using System.Xml;

XmlDocument xDoc = new XmlDocument();
xDoc.Load("people.xml");
XmlElement? xRoot = xDoc.DocumentElement;

XmlNodeList? companyNodes = xRoot?.SelectNodes("//person/company");
if(companyNodes is not null)
{
   foreach (XmlNode node in companyNodes)
       Console.WriteLine(node.InnerText);
}

Acest cod va afișa numele companiilor asociate cu fiecare element person.

← Lecția anterioară Lecția următoare →