検索

再版: http://www.php.cn/

C# では、XPath 構文をよく使用しますが、これは非常に強力です。 XPath は、Xml 内のノードや属性を素早く見つけることができます。また、xslt の使用に関する基本的な知識でもあります

symbol


/pets/pets/dog ペットノードの下の犬ノードを選択します 最初の犬ノード最後の犬ノード、last()はxPath組み込み関数です


2. ノード間の区切り文字として使用されています mod は、剰余

3 より大きい =

& より大きい未満

and and 関連

or or or or relationship

4.

XPath Axes

直訳すると XPath 軸の意味ですが、私の理解によれば、これを XPath ノード関係操作キーワードに変換する方が適切です。これは、現在のノードに関連する 1 つまたはノードのグループを示す一連のキーワードと ::二重コロンを組み合わせたものです。

構文 axisname::nodetest を使用します。 [述語]は軸名::ノード名 [ノード条件の取得]

具体的な説明は以下の通りです

キーワード

説明

例の説明

例の説明

/

は、ルートノードから開始することを意味します

の選択を開始します

ルートノードペットを選択してください

はノードと子ノードの間のスペーサーを表します

//xx

という意味です現在のノードの位置に関係なく、XML ドキュメント全体から検索します

//price

ドキュメント内のすべての価格ノードを選択します

.

単一の英語の半角ピリオドは現在のノードの選択を示します

/pets/.

ペットノードの選択

...

ダブルポイント、親ノードの選択を示します

/ ets/dog[0]/..

は、最初の犬ノードの親ノードであるペットノードを示します

@xx

選択属性を表します

//dog/@color

すべての犬ノードのカラー属性セットの選択を表します

[…]

角括弧は選択条件を示し、括弧は条件を示します

//dog[@color='white']

色が白のすべての犬ノード

//dog[/priceすべての価格バイト犬ノードポイント値が 100 未満の場合

括弧内の数字はノードのインデックスで、C# などの言語の配列と同様に、配列の添字は 1 から始まります

//dog [1]

//dog[last()]

|

垂直バーはマージされたノードの組み合わせを表します
//dog[@color='white'] //cat[@color='white']

dog ノードと色属性を白に設定し、カラー属性を白に設定した猫ノード

*

アスタリスクは任意の名前のノードまたは属性を表します

//dog/*

はすべてを表します犬ノードの子ノード

//dog/@*

犬ノードのすべての属性ノードを表します

attribute以下following-siblingpreceding名前空間ノードをすべて選択現在のノードの 現在のノードの親ノード現在のノード以降も同様 父と弟のノード自分: :* は 1 つのポイントに相当します。
ancestor

現在のノードの親ノード

ancestor::pig

現在のノードの祖先ノードのpigノード

先祖か-self

現在のノードとその親ノード

ancestor::pig

現在のノードのすべての属性

属性::重量

@weightと同等、attribute::と@は同等
child

現在のノードの全バイトポイント

child::*[name()!='price']

名前がpriceではない子ノードを選択してください

descendant

descendantノード

descendant::*[@*]

descendant属性を持つノード

descendant-or-self

子孫ノードと現在のノード

descendant-or-self::*

現在のノード以降のすべてのノードXML ドキュメント

Following::*

現在のノードの同父弟ノード

following-sibling::

Xmlドキュメント

preceding::*

の現在のノードより前のすべてのノード

namespace::*

parent

parent::

はdouble pointに相当します。

preceding-sibling

preceding-sibling::*

self

現在のノード


 

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() != &#39;pig&#39;]");
 
 
//选择价格大于100而不是pig的动物
XmlNodeList priceGreaterThan100s = doc.SelectNodes("/pets/*[price p @weight >10 and name() != &#39;pig&#39;]");
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中文网(www.php.cn)! 


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
スケーリングXML/RSS処理:パフォーマンス最適化手法スケーリングXML/RSS処理:パフォーマンス最適化手法Apr 27, 2025 am 12:28 AM

XMLおよびRSSデータを処理する場合、次の手順でパフォーマンスを最適化できます。1)LXMLなどの効率的なパーサーを使用して、解析速度を改善します。 2)SAXパーサーを使用して、メモリの使用量を削減します。 3)Xpath式を使用して、データ抽出効率を改善します。 4)処理速度を改善するために、マルチプロセスの並列処理を実装します。

RSSドキュメント形式:RSS 2.0以降の探索RSSドキュメント形式:RSS 2.0以降の探索Apr 26, 2025 am 12:22 AM

RSS2.0は、コンテンツパブリッシャーが構造化された方法でコンテンツを配布できるようにするオープン標準です。タイトル、リンク、説明、リリース日などの豊富なメタデータが含まれているため、サブスクライバーは迅速にコンテンツを参照してアクセスできます。 RSS2.0の利点は、そのシンプルさとスケーラビリティです。たとえば、カスタム要素を許可します。つまり、開発者は著者、カテゴリなどのニーズに基づいて追加情報を追加できます。

RSSの理解:XMLの視点RSSの理解:XMLの視点Apr 25, 2025 am 12:14 AM

RSSは、頻繁に更新されるコンテンツを公開するために使用されるXMLベースの形式です。 1。RSSFeedは、タイトル、リンク、説明などを含むXML構造を通じて情報を整理します。2。rssfeedの作成には、言語やリリース日などのメタデータを追加するXML構造での書き込みが必要です。 3.高度な使用法には、マルチメディアファイルと分類された情報を含めることができます。 4.デバッグ中にXML検証ツールを使用して、必要な要素が存在し、正しくエンコードされていることを確認します。 5. RSSFeedの最適化は、構造をシンプルに保つことで、ページング、キャッシュ、および保持することで実現できます。この知識を理解して適用することにより、コンテンツを効果的に管理および配布できます。

XMLのRSS:タグ、属性、および構造のデコードXMLのRSS:タグ、属性、および構造のデコードApr 24, 2025 am 12:09 AM

RSSは、コンテンツを公開および購読するために使用されるXMLベースの形式です。 RSSファイルのXML構造には、ルート要素、要素、および複数の要素が含まれ、それぞれがコンテンツエントリを表します。 XMLパーサーを介してRSSファイルを読み取り、解析すると、ユーザーは最新のコンテンツを購読して取得できます。

RSSにおけるXMLの利点:技術的なディープダイビングRSSにおけるXMLの利点:技術的なディープダイビングApr 23, 2025 am 12:02 AM

XMLには、RSSの構造化データ、スケーラビリティ、クロスプラットフォームの互換性、解析検証の利点があります。 1)構造化されたデータにより、コンテンツの一貫性と信頼性が保証されます。 2)スケーラビリティにより、コンテンツのニーズに合わせてカスタムタグを追加できます。 3)クロスプラットフォームの互換性により、さまざまなデバイスでシームレスに動作します。 4)分析および検証ツールは、フィードの品質と完全性を確保します。

XMLのRSS:コンテンツシンジケーションのコアを発表しますXMLのRSS:コンテンツシンジケーションのコアを発表しますApr 22, 2025 am 12:08 AM

XMLでのRSSの実装は、構造化されたXML形式を使用してコンテンツを整理することです。 1)RSSは、チャネル情報やプロジェクトリストなどの要素を含むデータ交換形式としてXMLを使用します。 2)RSSファイルを生成する場合、コンテンツは仕様に従って整理し、サブスクリプションのためにサーバーに公開する必要があります。 3)RSSファイルは、読者またはプラグインを介してサブスクライブして、コンテンツを自動的に更新できます。

基本を超えて:高度なRSSドキュメント機能基本を超えて:高度なRSSドキュメント機能Apr 21, 2025 am 12:03 AM

RSSの高度な機能には、コンテンツネームスペース、拡張モジュール、条件付きサブスクリプションが含まれます。 1)コンテンツネームスペースはRSS機能を拡張します。2)dublincoreやiTunesなどの拡張モジュールを拡張してメタデータを追加します。これらの関数は、情報収集の効率を改善するためにXML要素と属性を追加することにより実装されます。

XMLバックボーン:RSSフィードが構造化される方法XMLバックボーン:RSSフィードが構造化される方法Apr 20, 2025 am 12:02 AM

rssfeedsusexmltoStructurecontentupdates.1)xmlprovidesahierararchStructurefordata.2)theelementDefinesthefeed'sidentityandContainesements.3)letentionEntentividualContentPieces.4)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール