Izmantojot XPath var atrast nepieciešamo jebkurā derīgā XML dokumentā (vai XML dokumenta fragmentā). "Nepieciešamais" var būt gan elements, gan atribūts, gan konkrēta elementa vai atribūta vērtība. Atkarībā no tā, ko vēlamies darīt, jāizmanto kāda no XML metodēm (SQL Server XML Datu tipa metodes). XPath sintakse www.w3schools.com.
Pieņemsim, ka XML dokumentā vēlamies atrast konkrētu elementa/atribūt vērtību. Izmantojot XML datu tipa "value" metodi- jāņem vērā, ka XPath ir reģistrjūtīgs:
Declare @myXML XML;Pieņēmām, ka tiks atrasta tikai viena vērtība. Bet izmantojot XML "nodes" metodi var atrast vairākas vērtības:
Set @myXML =
N'
<PersonInfo>
<Person ID="21" VIP="0">
<Name>Jānis</Name>
<LastName>Bērziņš</LastName>
</Person>
<Person ID="22" VIP="1">
<Name>Liene</Name>
<LastName>Lapiņa</LastName>
<Profession>Analītiķe</Profession>
</Person>
</PersonInfo>
';
Select
-- Pirmās personas vārds:
@myXML.value('(/PersonInfo/Person/Name)[1]', 'varchar(50)'),
-- Otrās personas ID
@myXML.value('(/PersonInfo/Person)[2]/@ID', 'int'),
-- Personas ar ID = 22 vārdu
@myXML.value('(/PersonInfo/Person[@ID="22"]/Name)[1]', 'varchar(50)'),
-- Personas ar VIP = 1 un profesiju "Analītiķe" vārdu
@myXML.value('(/PersonInfo/Person[@ID="22" and Profession="Analītiķe"]/Name)[1]', 'varchar(50)'),
-- Personas ar VIP = 1 un profesiju "Analītiķe" vārdu. 2. veids
@myXML.value('(/PersonInfo[Person/Profession="Analītiķe"]/Person[@ID="22"]/Name)[1]', 'varchar(50)'),
-- Personas ar VIP = 1 un profesiju "Analītiķe" vārdu. 3. veids
@myXML.value('(/PersonInfo/Person[@ID="22"]/Name[../Profession="Analītiķe"])[1]', 'varchar(50)'),
-- Personas ar VIP = 1 un profesiju "Analītiķe" vārdu. 4. veids
@myXML.value('(/PersonInfo[Person/@ID="22"]/Person/Name[../Profession="Analītiķe"])[1]', 'varchar(50)')
Declare @myXML XML;Un ja XML tiek izmantota vārdtelpa, tad var uzmest aci rakstam Datu izgūšana no XML: XML vārdtelpas (namespaces).
Set @myXML =
N'
<PersonInfo>
<Person ID="21" VIP="0">
<Name>Jānis</Name>
<LastName>Bērziņš</LastName>
</Person>
<Person ID="23" VIP="1">
<Name>Zane</Name>
<LastName>Kalniņa</LastName>
</Person>
<Person ID="22" VIP="1">
<Name>Liene</Name>
<LastName>Lapiņa</LastName>
<Profession>Analītiķe</Profession>
</Person>
</PersonInfo>
';
-- atlasa visas personas:
Select P.e.query('.')
From @myXML.nodes('/PersonInfo/Person') As P(e);
-- atlasa visas Vip personas, to vārdi, uzvārdi, profesijas:
Select
P.e.value('(@ID)[1]', 'varchar(50)') ID,
P.e.value('(Name)[1]', 'varchar(50)') Vards,
P.e.value('(LastName)[1]', 'varchar(50)') Uzvards,
P.e.value('(Profession)[1]', 'varchar(50)') Profesija
From @myXML.nodes('/PersonInfo/Person[@VIP = "1"]') As P(e);
-- atlasa visus ID, kam ir profesija
Select P.e.value('(@ID)[1]', 'varchar(50)') ID
From @myXML.nodes('/PersonInfo/Person[Profession=*]') As P(e);
-- atlasa elementus, kam ir jebkādi atribūti
Select P.e.value('(@ID)[1]', 'varchar(50)') ID
From @myXML.nodes('//*[@*]') As P(e);
-- atlasa elementus, kam ir ID atribūts
Select P.e.value('(@ID)[1]', 'varchar(50)') ID
From @myXML.nodes('//*[@ID]') As P(e);
Nav komentāru:
Ierakstīt komentāru