XPath - XML Path Language

11. mars 2009

Xpath är ett språk som används för att definiera delar av ett XML dokument, man använder uttryck för att navigera inom dokumentet.

Xpath består av ett bibliotek med standardfunktioner samt är en mycket viktig del inom XSLT, som används för att transformera XML visuellt.

Man kan med enkla uttryck lokalisera element, attribut och innehåll i ett XML-dokument, som man kanske vill hämta eller bearbeta på något sätt.

Exempel på ett enkelt XML-dokument:

<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book>
  <title lang="eng">Applying UML And Patterns</title>
  <price>330</price>
  <author>Craig Larman</author>
</book>
<book>
  <title lang="eng">C# Patterns</title>
  <price>432</price>
  <author>Craig Larman</author>
</book>
</books>

 Xpath uttryck för att hämta noder:

/    Utgår från rot-noden, hämtar alla
//    Utgår från den aktuella noden, hämtar alla oberoende av matchning
.    Hämtar den aktuella noden
..    Hämtar föräldern till den aktella noden
@    Hämtar attribut

Exempel:
//book    Hämtar alla book-element, oavsett var de finns i dokumentet
//@lang    Hämtar alla attribut som heter lang

Xpath predikat

/books/book[2]                Hämtar det andra book-elementet som är ett barn till books.
/books/book[last()]            Hämtar det sista book-elementet som är ett barn till books.
//title[@lang='eng']        Hämtar alla title-element med attributet lang, och värdet eng.
/books/book[price>400]        Hämtar alla book-element som har ett pris som är mindre än 400.

Xpath wildcards (hämta okända noder)

*        Matchar alla noder
@*        Matchar alla attribut
node()    Matchar alla noder av alla slag

Exempel:
/books/*    Hämta alla noder som är barn till books
//*            Hämta alla element i dokumentet
//title[@*]    Hämta alla title-element som har ett attribut

Relationer mellan noder

Parent
Alla element och attribut har en förälder. I exemplet ovan är book förälder till title, author, price och lang.

Children
Element noder kan ha noll, en eller flera barn-noder. I exemplet ovan är title, price och author barn till book.

Siblings
Noder som har samma förälder, syskon. I exemplet ovan så är author, price och title syskon.

Ancestors
En nods förälder, förälder-nodens förälder etc. book är förälder til author, books är förälder till book.

Descendants
En nods barn, barnens barn. Book, author, price och title är barn till books.

Exempel:

child::book         Hämtar alla book-noder som är barn till den aktuella noden
attribute::lang        Hämtar alla lang-attribut för den aktuella noden
child::*            Hämtar alla barn till den aktuella noden
attribute::*        Hämtar alla attribut för den aktuella noden
descendant::book    Hämtar alla barn och barnbarn till den aktuella noden

 

Just nu värderat 4.2 av 6 människor

  • Currently 4,166667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

XML

CDATA vs PCDATA

31. december 2008
CDATA - (Unparsed) Character Data
PCDATA - Parsed Character Data


All text i ett XML dokument kommer att parse:as (analyseras), men text inom en CDATA sektion kommer att ignoreras vid analysen.

<meddelande>Denna text kommer analyseras, inte bara taggarna</meddelande>

Att datan inom taggarna analyseras beror på att de även kan innehålla andra taggar, som exempelvis:
<adress><gata>Gatuadress</gata><postnummer>Postnummer</postnummer></adress>

Detta kodstycket kommer under analysen att delas upp i flera sub-element likt denna modell:
<adress>
    <gata>Min gatuadress</gata>
    <postnummer>Mitt postnummer</postnummer>
</adress>


Tecken som "<" och "&" är ej tillåtna inom XML element.

"<" kommer att generera ett fel eftersom parsern tror att det är början på ett nytt element.
"&" kommer även det generera ett fel, parsern kommer tro att det är början på en tecken-entitet.

Vill man spara kodstycken som exempelvis JavaScript i XML bör man därför fundera på att definera det som CDATA. Allt som står inom en CDATA-sektion kommer ignoreras av parsern.

En CDATA sektion börjar med "<![CDATA[" och slutar med "]]>"

Observera att en CDATA sektion ej får inehålla strängen "]]>", då parsern kommer tro att sektionen avslutas. Kom ihåg att CDATA sektioner ej kan vara nästlade. Var även uppmärksam på mellanslag och radbrytningar som kan påverka parsern i CDATA sektioner.

Just nu värderat 4.5 av 2 människor

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Allmänt, XML