Nachdruck: //m.sbmmt.com/
In c# suchen und durchlaufen wir häufig Knoten, hierfür können wir XPath verwenden Syntax, Beispiel 🎜>
Symbol <?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> Nach dem Login kopieren | Beschreibung | Beispiel | Beispielbeschreibung
| ||||||||||||||||||||||||||||||||||||||||||||||||
<🎜><🎜>/<🎜 ><🎜> | <🎜> bedeutet Auswahl vom Wurzelknoten<🎜> | <🎜>/pets<🎜> | <🎜>Wählen Sie die Wurzelknoten-Haustiere aus<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Knoten und untergeordnete Elemente darstellen Abstandshalter zwischen Knoten<🎜> | <🎜>/pets/dog<🎜> | <🎜>Wählen Sie den Knoten „Hund“ unter dem Knoten „Haustiere“ aus<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||
<🎜><🎜>//xx< 🎜><🎜> | <🎜> bedeutet die Suche im gesamten XML-Dokument, unabhängig davon die aktuelle Knotenposition <🎜> | <🎜>//price<🎜> | <🎜>Alle Preisknoten im Dokument auswählen<🎜> td> | ||||||||||||||||||||||||||||||||||||||||||||||||
<🎜><🎜>.<🎜><🎜> | <🎜>Ein einzelner englischer Punkt halber Breite zeigt die Auswahl des aktuellen Knotens an<🎜> | <🎜>/pets/.<🎜> | <🎜>Knoten Haustiere auswählen<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Doppelte Punkte, die darauf hinweisen die Auswahl des übergeordneten Knotens<🎜> | <🎜>/pets/dog[0]/..<🎜> | <🎜> stellt den Haustierknoten dar, der der erste Hund ist. Der übergeordnete Knoten des Knotens<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||
<🎜><🎜>@xx<🎜><🎜> | < td valign="top" width="269"><🎜> gibt das Auswahlattribut an<🎜><🎜>//dog/@color<🎜> | <🎜>Zeigt die Auswahl des Farbattributs an Menge aller Hundeknoten<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||
<🎜><🎜>[…]<🎜>< 🎜> | <🎜 >Die eckigen Klammern geben die Auswahlbedingungen an, und die Bedingungen innerhalb der Klammern sind <🎜> | < td valign="top" width="142"><🎜>//dog[@color='white']<🎜> td><🎜>Alle Hundeknoten mit der Farbe Weiß<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>//dog[/price<100]<🎜> | <🎜>Alle Hundeknoten mit einem Preis-Byte-Wert von weniger als 100<🎜 > | ||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Die Zahl in den Klammern ist der Knotenindex, ähnlich wie bei Arrays in Sprachen wie c#. Die Indizes beginnen bei 1<🎜> | <🎜>//dog[1]<🎜> | <🎜>Der 1. Hundeknoten<🎜> td> | |||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>//dog[last( )]<🎜> | <🎜>Der letzte Hundeknoten, last(), ist die integrierte xPath-Funktion <🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜 ><🎜>|<🎜><🎜> | <🎜>Einzelner vertikaler Balken Stellt die Kombination zusammengeführter Knoten dar<🎜> | <🎜>//dog[@color='white'] | //cat[@color='white'] <🎜> | <🎜>Der Hundeknoten, dessen Farbattribut weiß ist, und der Katzenknoten, dessen Farbattribut weiß ist<🎜> | <🎜><🎜>*<🎜><🎜> | <🎜>Das Sternchen steht für a Knoten oder Attribut mit beliebigem Namen<🎜> | <🎜>//dog/*<🎜> td> | <🎜>Stellt alle untergeordneten Knoten des Hundeknotens dar<🎜> | ||||||||||||||||||||||||||||||||||||||||||||
<🎜>//dog/@ *<🎜> | <🎜>Stellt alle Attributknoten des Hundeknotens dar<🎜> | tr>
2. XPath-Mathematikoperatoren
+ Pluszeichen bedeutet Hinzufügen von
- bedeutet Subtraktion von Zahlen
* bedeutet Multiplikation mit
p bedeutet Division, wobei das mathematische Divisionszeichen / als Trennzeichen zwischen Knoten verwendet wurde
mod bedeutet Rest
3. Logischer XPath-Operator
= gleich, äquivalent zu ==
< in c# 🎜>!= Nicht gleich > Größer als >= Größer als oder gleich < Kleiner als <= Kleiner als oder gleichund und mit der Beziehung oder oder oder Beziehung 4.
XPath-Achsen Wörtlich übersetzt heißt das XPath hat die Bedeutung von axis, aber nach meinem Verständnis ist es angemessener, es in das XPath-Knotenbeziehungsoperationsschlüsselwort zu übersetzen, bei dem es sich um eine Reihe von Schlüsselwörtern plus :: Doppelpunkt handelt, um einen oder eine Gruppe von Knoten anzugeben, die mit dem verknüpft sind aktueller Knoten.
Verwenden Sie die Syntax: axisname::nodetest[predicate], also Achsenname::node name [Knotenbedingung abrufen]Die spezifische Beschreibung lautet wie folgt:Schlüsselwörter
| < 🎜>Anleitung<🎜> | <🎜>Beispiel<🎜> | <🎜>Beispielbeschreibung<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Vorfahr<🎜> td> | <🎜>Der übergeordnete Knoten des aktuellen Knotens<🎜> | <🎜>Vorfahr: :pig<🎜> | <🎜>pig-Knoten im Vorgängerknoten des aktuellen Knotens<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Der aktuelle Knoten und sein Vorgängerknoten <🎜> | <🎜>ancestor::pig<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Attribut<🎜> | <🎜>Alle Attribute des aktuellen Knotens<🎜> | <🎜>attribute::weight<🎜> | <🎜> entspricht @weight, attribute:: und @ entsprechen <🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>child< 🎜> | <🎜>Alle Bytepunkte des aktuellen Knotens<🎜> | < 🎜>child::*[name()!='price']< 🎜> | <🎜>Wählen Sie den untergeordneten Knoten aus, dessen Name nicht preis ist<🎜 > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Nachkomme<🎜> | < 🎜>Nachkommender Knoten<🎜> | <🎜>descendant::*[@*]<🎜> | <🎜>Nachkommende Knoten mit Attributen<🎜> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>descendant-or-self<🎜> | < 🎜>Nachkommende Knoten und aktueller Knoten<🎜> | <🎜>descendant- or-self::*<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>folgend<🎜> | <🎜>Alle Knoten nach dem aktuellen Knoten im XML-Dokument<🎜> | <🎜>following::*<🎜> td> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>following-sibling<🎜> td> | <🎜>Derselbe Vater- und jüngere Bruderknoten des aktuellen Knotens<🎜 > | <🎜>following- sibling::<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> vorangehend<🎜> | <🎜>Alle Knoten davor der aktuelle Knoten im XML-Dokument<🎜> | <🎜>preceding::*<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Namespace<🎜> | <🎜>Alle Namespace-Knoten des aktuellen Knotens auswählen<🎜> | <🎜>namespace::*<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>parent<🎜> | <🎜>Der übergeordnete Knoten des aktuellen Knotens<🎜> | < td valign="top" width="142"><🎜>parent::<🎜><🎜>Entspricht Doppelpunkten..<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>Vorhergehendes-Geschwister<🎜> | <🎜>Derselbe Vater- und Bruderknoten nach dem aktuellen Knoten<🎜> | <🎜>preceding-sibling::*<🎜> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜>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(); } } }
以上就是xml学习(6) 在c#Xpath实例的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!