問題タブ [xpathnavigator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2223 参照

c# - C# で独自の XPathNavigator を実装する

Microsoft の XPathNavigator クラスから派生したクラスの C# 実装例を探しています。そのような記事を教えてくれる人はいますか?

ご存じかもしれませんが、ご存知かもしれませんが、XmlNavigator は、ほとんどのデータ モデルに XPath ナビゲーションを重ねることができるように設計されています。

派生した XPathNavigator クラスを実装しましたが、非常にうまく機能します。再帰的に検索する XPath 式、つまり "//*" を除いて、これは非常に良いことです。

Clone、MoveToFirstChild、または MoveTo のオーバーライドに微妙なバグがあることは確かであり、別の例が存在する場合はそれを調べることが役立つと思いました。

また、これについて論じている雑誌の記事を見たことがあると確信しています。私の検索では何も得られませんでした。多分誰かがそのような記事を覚えています。

0 投票する
2 に答える
4189 参照

c# - XPath 式の解析

XPath 用の「AET」(抽象式ツリー) を作成しようとしています (WYSIWYG XSL エディターを作成しているため)。この 3 ~ 4 時間、私は XPath BNF に頭を悩ませていました。

私は別の解決策を考えました。CreateNavigator が呼び出されたときに独自の XPathNavigator を返す IXPathNavigable を実装するクラスを作成できると考えました。この XPathNavigator は、すべてのメソッド呼び出しで常に成功し、それらの呼び出しを追跡します。たとえば、customers ノードに移動し、次に customer ノードに移動しました。次に、この情報を (できれば) 'AET' を作成するために使用できます (したがって、オブジェクト モデルに顧客/顧客が含まれるようになります)。

唯一の問題は、 XPathExpressionを介して IXPathNavigable を実行するにはどうすればよいかということです。

私はこれが過度に怠惰であることを知っています。しかし、他の誰かがこの努力をして、XPath 式パーサーを作成したことがありますか? テストできないため(IXPathNavigableに対してXPathExpressionを実行できないため)、考えられるソリューションをまだPOCしていません。したがって、ソリューションが機能するかどうかさえわかりません。

0 投票する
14 に答える
80749 参照

c# - C#でデフォルトの名前空間でXpathを使用する

デフォルトの名前空間を持つXMLドキュメントがあります。XPathNavigatorを使用して、Xpathを使用してノードのセットを次のように選択しています。

結果が返されません。これは、名前空間を指定していないためだと思います。選択に名前空間を含めるにはどうすればよいですか?

0 投票する
1 に答える
469 参照

.net - XPathNavigator から元の XML を取得することは可能ですか?

XML ドキュメントがあり、シンタックス ハイライトを実行したいと考えています。

このコードでは、 XPathDocumentXPathNavigator、およびXPathNodeIteratorを使用しています。Select()を呼び出した後、XML ドキュメント内の元のテキストを取得するにはどうすればよいですか?

私にとっては、選択したノードの最初と最後の両方のIXmlLineInfoを取得することもできます。ここで、選択したノードの先頭に移動して、そのノードの IXmlLineInfo を取得できます。しかし、次のノード (MoveToNext()) に移動する方法しか知りません。現在のノードの最後に移動する方法がわかりません。また、問題のノードがシーケンスの最後のノードである場合 (兄弟がいない場合)、このアプローチは機能しません。

現在のノードの生のテキスト全体を返す xpath 式がある場合にも機能します。今のところ、私もそのようなものを見つけることができません。


編集:恥知らずなハックでこの問題を乗り越えました。強調表示する必要があるテキストの長さを判断するために、元の xml テキストを手動で解析し、山かっこと名前トークンを検索します。見栄えはよくありませんが、他に優れた点がなければ、単純な XML ファイルで機能します。

誰かが持っているなら、私はまだ本当の答えに興味があります。

0 投票する
1 に答える
2051 参照

xml - XPathNavigator から xml を読み取れません

これが私のコードです。XPathNavigator を介してデータを読み取れない理由がわかりません。しかし、名前空間とスキーマを追加するかなり前のことです。

XML:

およびスキーマ:

0 投票する
1 に答える
3472 参照

.net - 空の名前空間をXPathNavigator.GetAttributeに渡さなければならないのはなぜですか?

次のXMLマークアップがあるとします。

そして要素にXPathNavigator配置され、<child>

奇妙な結果を生成します:withNsは空で、withoutNsが含まれていますfoo

何故ですか?name属性は要素のDemoように名前空間になければならないので、私はそれが逆になると予想していました。child

MSDNのドキュメントには、渡すことの魔法の意味が記載されていないnamespaceURI=""ため、属性の実際の名前空間URIを渡す必要があると想定しました。

0 投票する
2 に答える
2723 参照

c# - .NET XPathNavigator を動作させることができません

XPathNavigator に問題があります。ストリームに名前空間のない「トピック」要素の束を含むドキュメントがあります。

私は使用しています(式は最小限に抑えられています。最初は自分の式が間違っていると思いました):

これはうまくいきません。または同様のものを選択*/*/*して、「トピック」要素を問題なく取得できます。オンラインテスターや他の言語で式を実​​行してみましたが、うまくいきました。

質問: 何が問題なのですか? 名前空間を使用してドキュメントを解析するたびに信じられないほどの痛みを引き起こす、呪われた NamespaceManager オブジェクトに関係しているという疑いが長引いていますが、今回は、探している要素に明示的な名前空間がありません! 追加した:

それを2番目の引数としてSelectに渡します-無駄に。「」名前空間をこのものに追加する/正しく使用するにはどうすればよいですか?

または、さらに良いことに、他の言語のように、クラスのこの恐ろしい忌まわしさを使用せずに、.NET で XPath を使用する方法はありますか? 名前空間が必要な場合は、式に記述できます...

更新:回避策を見つけました-ルートノードからデフォルトのxmlnsをコピー/貼り付けてから、その名前空間を使用します:

ただし、デフォルトの URI を知っている必要はありませんし、式を不要な x:-s で汚染することも好きではありません。したがって、今は質問の2番目の部分への回答のみが必要です。

0 投票する
3 に答える
1310 参照

silverlight - SilverlightのXPathNavigator

XPathNavigatorを多用して特定のxmlドキュメントを解析するコードライブラリがあります。xmlドキュメントは相互参照されます。つまり、要素は、解析中にまだ検出されていない別の要素を参照できます。

ドキュメントは実際にはこのようには見えませんが、ポイントは、1)ドキュメント構造全体を強制するxmlスキーマがあり、2)ドキュメント内の要素がいくつかのIDを使用して相互に参照できること、および3)かなりあることです。ドキュメント内の異なる要素間のそのような相互参照はほとんどありません。

ドキュメントは2つのフェーズで解析されます。最初のパスで、ドキュメントをウォークスルーします

また、XPathNavigator.Clone()メソッドを使用して、ドキュメント内の現在の位置(要素)を「ブックマーク」することもあります。これにより、XPathNavigatorの軽量インスタンスが得られ、これをどこかに保存して、後でドキュメント内の特定の場所(要素)に戻るために使用できます。

最初のパスで十分な情報が収集されたら(たとえば、id = '1234'のElementXが実際に存在することを確認しました)、保存されたブックマークに戻って(保存されたXPathNavigatorを使用して)解析を完了します。

さて、今私はSilverlight 3.0でこのライブラリを使用しようとしていますが、恐ろしいことにXPathNavigatorはSystem.Xmlアセンブリにありません。

質問:

1)明らかな何かが欠けていますか(つまり、XPathNavigatorは、ツールキットやフリーウェアライブラリなど、何らかの形や形式で存在します)?

2)コードに変更を加える必要がある場合、最善の方法は何ですか?理想的には、XLinqのようなものを使用できるようにするためだけに、コードの80%を書き直さないように、最小限の変更を加えたいと思います。

再開するには、XPathNavigatorをあきらめなければならない場合に必要なのは、ドキュメント内の場所をブックマークして、それらに戻って、中断したところから繰り返し続けることができるようにする方法だけです。

ヘルプ/アイデアを事前に感謝します。

0 投票する
2 に答える
2158 参照

c# - C#でのXPathNavigatorの使用についてヘルプが必要ですか?

私のXMLファイルは以下の通りです。スキーマ要素と通常の要素を混合しました。

以下の私のC#コード。要素をループしたい(スキーマのすべてのコンテンツを渡す)

<EquipmentConstants xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

提案をお願いします。ありがとうございました。

0 投票する
1 に答える
360 参照

sum - xPath Evaluate vs XPathNodeIterator

巨大なxmlファイル(120MB)でいくつかのタグを数える最速の方法を探しています

助言がありますか?

事前にご挨拶と感謝