XPath kann Knoten oder Attribute in XML schnell finden. Die XPath-Syntax ist einfach, aber leistungsstark genug. Sie umfasst auch die Grundkenntnisse für die Verwendung von XSLT.
Beispielsyntax:
1. Symbole in XPath
<?xml version="1.0" encoding="utf-8" ?> <pets> <cat color="black" weight="10"> <price>100</price> <desc>this is a black cat</desc> </cat> <cat color="white" weight="9"> <price>80</price> <desc>this is a white cat</desc> </cat> <cat color="yellow" weight="15"> <price>80</price> <desc>this is a yellow cat</desc> </cat> <dog color="black" weight="10"> <price>100</price> <desc>this is a black dog</desc> </dog> <dog color="white" weight="9"> <price>80</price> <desc>this is a white dog</desc> </dog> <dog color="yellow" weight="15"> <price>80</price> <desc>this is a yellow dog</desc> </dog> </pets>
Symbol
Beschreibung | Beispiel |
Beispielbeschreibung |
/ |
bedeutet Auswahl aus dem Wurzelknoten | /Haustiere | Wurzelknoten auswählenHaustiere | |
stellt das Trennzeichen zwischen Knoten und untergeordnetem Knoten dar | /Haustiere/Hund | Wählen Sie den Knoten Hund unter dem Knoten Haustiere aus | |
//xx | bedeutet, im gesamten xml-Dokument zu suchen, unabhängig von der aktuellen Knotenposition | //Preis | Alle Preis-Knoten im Dokument auswählen > Ein einzelner halbbreiter englischer Punkt zeigt die Auswahl des aktuellen Knotens an | /Haustiere/. | Wählen Sie HaustiereKnoten |
.. | Doppelte Punkte zeigen die Auswahl des übergeordneten Knotens an | /pets/dog[0]/..
| stellt den Knoten Haustiere dar, der der übergeordnete Knoten des ersten Knotens Hund <🎜 ist > |
@xx
| bedeutet Auswahl von Attributen | //dog/@color | bedeutet: Wählen Sie den Attributsatz Farbe aller Hund-Knoten
|
[…] | Die eckigen Klammern geben die Auswahlbedingungen an, und die Bedingungen in den Klammern sind | //dog[@color='white'] | Alle Hund-Knoten | //Hund[/Preis<100]
Alle Preis Knoten, deren Wert kleiner als 100 ist | Die Zahl in den Klammern ist der Knotenindex, ähnlich wie |||
, Array Indizes beginnen bei 1 //dog[1] | Knoten 1Hund
| ||
//dog[last()] | Der letzte Knoten dog, last(), ist die integrierte Funktion xPath | ||
|
| Der einzelne vertikale Balken zeigt die Kombination zusammengeführter Knoten an | //Hund[@color='white'] |. //Katze[@color='white'] | FarbeDer Knoten Hund mit dem Attribut weiß und der Knoten Katze< mit dem Attribut weiß von Farbe 🎜>Knoten |
* | Das Sternchen steht für einen Knoten oder Attribut mit beliebigem Namen | //hund/*
| repräsentiert alle untergeordneten Knoten des Knotens Hund
|
//dog/@* | repräsentiert alle Attributknoten des Hund-Knotens |
2. XPath-Matheoperatoren
+Das Pluszeichen bedeutet Addition
-bedeutet Subtraktion von Zahlen
*bedeutet Multiplikation mit
pbedeutet Division, wobei das mathematische Divisionszeichen / als Trennzeichen zwischen Knoten verwendet wurde
modbedeutet Rest
3. Logischer XPath-Operator
=ist gleich, äquivalent zu ==
!=< in c# 🎜>nicht gleich>
größer als>=
größer als oder gleich<
weniger als<=
kleiner als oder gleich und
und bezogen auf oder
Oder oder Beziehung
4.
Wörtlich übersetzt ist dies die Bedeutung von XPath-Achse, Aber meiner Meinung nach ist es angemessener zu verstehen, dass dies in XPath-Knotenbeziehungsoperationsschlüsselwörter übersetzt wird, bei denen es sich um eine Reihe von Schlüsselwörtern plus ::doppeltem Doppelpunkt handelt, um einen oder eine Gruppe von Knoten anzugeben, die mit dem aktuellen Knoten verknüpft sind Syntax verwenden: Achsenname::Knotentest[Prädikat] ist der Achsenname::Knotenname[Knotenbedingung]
Die spezifische Beschreibung lautet wie folgt:
Schlüsselwörter | Beschreibung | Beispiel
| Beispielbeschreibung
|
Der übergeordnete Knoten des aktuellen Knotens | ancestor::pig | pig<🎜 im Vorfahrenknoten von der aktuelle Knoten >Node | |
ancestor-or-self | Der aktuelle Knoten und sein übergeordneter Knoten
| Vorfahr::Schwein | |
Attribut | Alle Attribute des aktuellen Knotens | attribute::weight | entspricht @weight, attribute:: und @ sind äquivalent |
Kind | Alle Bytepunkte des aktuellen Knotens | Kind::*[Name()!='Preis'] | Wählen Sie den untergeordneten Knoten aus, dessen Name nicht Preis ist |
Nachkomme | Nachkommender Knoten | descendant::*[@*]
| Nachkommende Knoten mit Attributen
|
Nachkomme oder Selbst | Nachkommende Knoten und aktueller Knoten | Nachkomme oder Selbst::* |
|
Folgen | XmlAlle Knoten nach dem aktuellen Knoten im Dokument | folgend::* |
|
Folge-Geschwister | Derselbe Vater- und jüngere Bruderknoten des aktuellen Knotens | Following-Geschwister::
|
|
voran | XmlAlle Knoten vor dem aktuellen Knoten im Dokument
| vorher::* |
|
Namespace | Alle Namespace-Knoten des aktuellen Knotens auswählen | namespace::* |
|
Elternteil | Der übergeordnete Knoten des aktuellen Knotens | Elternteil: : | entspricht einem Doppelpunkt.. |
Vorgänger-Geschwister
| Derselbe Vater- und Bruderknoten nach dem aktuellen Knoten | Vorgänger-Geschwister::* |
|
selbst | Aktueller Knoten | self::* | entspricht einem einzelnen Punkt . |
5. 常用的XPath函数介绍:
在XPath表达式中常用的函数有下面两个:
position() 表示节点的序号例如 //cat[position() = 2] 表示取序号为2的dog节点 last() 表示取最后一个节点 //cat[last()] name() 表示当前节点名字 /pets/*[name() != 'pig'] 表示/pets下名字不是pig的子节点
XPath的函数还有很多,包括字符串函数,数字函数和时间函数等,具体可以参考w3的网站。
以上是XPath的语法,下面我们看下如何在.Net中使用XPath
在.Net中可以通过XPathDocument或者XmlDocument类使用XPath。XPathDocument是只读的方式定位Xml节点或者属性文本等,而XmlDocument则是可读写的。
如下代码示例展示了如何使用XPathDocument和XmlDocument。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.XPath; using System.Xml; namespace UseXPathDotNet { class Program { static void Main(string[] args) { UseXPathWithXPathDocument(); UseXPathWithXmlDocument(); Console.Read(); } static void UseXPathWithXmlDocument() { XmlDocument doc = new XmlDocument(); doc.Load("http://www.cnblogs.com/yukaizhao/rss"); //使用xPath选择需要的节点 XmlNodeList nodes = doc.SelectNodes("/rss/channel/item[position()<=10]"); foreach (XmlNode item in nodes) { string title = item.SelectSingleNode("title").InnerText; string url = item.SelectSingleNode("link").InnerText; Console.WriteLine("{0} = {1}", title, url); } } static void UseXPathWithXPathDocument() { XPathDocument doc = new XPathDocument("http://www.cnblogs.com/yukaizhao/rss"); XPathNavigator xPathNav = doc.CreateNavigator(); //使用xPath取rss中最新的10条随笔 XPathNodeIterator nodeIterator = xPathNav.Select("/rss/channel/item[position()<=10]"); while (nodeIterator.MoveNext()) { XPathNavigator itemNav = nodeIterator.Current; string title = itemNav.SelectSingleNode("title").Value; string url = itemNav.SelectSingleNode("link").Value; Console.WriteLine("{0} = {1}",title,url); } } } }
XPath使用示例,请看下面的代码注释
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; namespace UseXPath1 { class Program { static void Main(string[] args) { string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <pets> <cat color=""black"" weight=""10"" count=""4""> <price>100</price> <desc>this is a black cat</desc> </cat> <cat color=""white"" weight=""9"" count=""5""> <price>80</price> <desc>this is a white cat</desc> </cat> <cat color=""yellow"" weight=""15"" count=""1""> <price>110</price> <desc>this is a yellow cat</desc> </cat> <dog color=""black"" weight=""10"" count=""7""> <price>114</price> <desc>this is a black dog</desc> </dog> <dog color=""white"" weight=""9"" count=""4""> <price>80</price> <desc>this is a white dog</desc> </dog> <dog color=""yellow"" weight=""15"" count=""15""> <price>80</price> <desc>this is a yellow dog</desc> </dog> <pig color=""white"" weight=""100"" count=""2""> <price>8000</price> <desc>this is a white pig</desc> </pig> </pets>"; using (StringReader rdr = new StringReader(xml)) { XmlDocument doc = new XmlDocument(); doc.Load(rdr); //取所有pets节点下的dog字节点 XmlNodeList nodeListAllDog = doc.SelectNodes("/pets/dog"); //所有的price节点 XmlNodeList allPriceNodes = doc.SelectNodes("//price"); //取最后一个price节点 XmlNode lastPriceNode = doc.SelectSingleNode("//price[last()]"); //用双点号取price节点的父节点 XmlNode lastPriceParentNode = lastPriceNode.SelectSingleNode(".."); //选择weight*count=40的所有动物,使用通配符* XmlNodeList nodeList = doc.SelectNodes("/pets/*[@weight*@count=40]"); //选择除了pig之外的所有动物,使用name()函数返回节点名字 XmlNodeList animalsExceptPigNodes = doc.SelectNodes("/pets/*[name() != 'pig']"); //选择价格大于100而不是pig的动物 XmlNodeList priceGreaterThan100s = doc.SelectNodes("/pets/*[price p @weight >10 and name() != 'pig']"); foreach (XmlNode item in priceGreaterThan100s) { Console.WriteLine(item.OuterXml); } //选择第二个dog节点 XmlNode theSecondDogNode = doc.SelectSingleNode("//dog[position() = 2]"); //使用xpath ,axes 的 parent 取父节点 XmlNode parentNode = theSecondDogNode.SelectSingleNode("parent::*"); //使用xPath选择第二个dog节点前面的所有dog节点 XmlNodeList dogPresibling = theSecondDogNode.SelectNodes("preceding::dog"); //取文档的所有子孙节点price XmlNodeList childrenNodes = doc.SelectNodes("descendant::price"); } Console.Read(); } } }
Das obige ist der detaillierte Inhalt vonXPath-Syntax: Spezifische Code-Einführung zur Verwendung von XPath-Beispielen in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!