問題タブ [xom]
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.
java - XML ドキュメント内の要素の正確な位置を見つける
XML ドキュメント内の要素の正確な位置を見つける方法を探しています。Document を XOM で解析し、通常の方法で処理します。注意が必要なのは、XML ドキュメントにいくつかのスクリプトが埋め込まれており (テキスト ノードのみ)、スクリプトが失敗した場合 (解析、ロジックなど)、ユーザー (これらのスクリプトを作成したユーザー) に正確な行番号を報告したいということです。スクリプトが宣言されました。
最も理想的な方法は、次のようなものです。
残念ながら、XOM の有無にかかわらず、これを行う方法を見つけることができませんでした。誰かがアイデアを持っているか、すでにこのようなことを行っている場合、私はいくつかの助けを借りることができます. :-)
android - XOM を使用して SOAP XML を作成する
私は石鹸メッセージを書き込もうとしています:
XOMを使用します。
を使用して要素を作成しています
しかし、xmlns:xsi および xmln:xsd 属性を追加する方法がわかりません。使用する
次のエラーを返します
では、これらの属性を追加するにはどうすればよいでしょうか?
ありがとう
java - XML の解析時に DTD を無視する
XOM xml ライブラリを使用してファイルを解析するときに、DTD 宣言を無視するにはどうすればよいですか。私のファイルには次の行があります:
そして、ドキュメントを build() しようとすると、DTD ファイルに対して filenotfound 例外が発生します。私はこのファイルを持っていないことを知っていますし、気にもしていません。XOM を使用している場合、どうすればこのファイルを削除できますか?
コード スニペットを次に示します。
この行で NullPointerException を取得します。
ソース XML ファイルから DTD 行を削除すると、正常に解析できますが、これは最終的な運用システムのオプションではありません。
jtidy - NekoHTML (または JTidy) + XOM でコメントがエスケープされる
私は NekoHTML を使用して一部の HTML をクリーンアップし、それを XOM にフィードしてオブジェクト モデルを取得しています。この過程のどこかで、コメントがエスケープされています。
入力 HTML の関連する例を次に示します (<head>
わかりやすくするためにほとんどをカットしています)。
コードは次のとおりです。
対応する出力は次のとおりです。
XOM ドキュメントから script 要素を抽出すると、既にマングルされているように見えます (SCRIPT 要素にはText
子ノードとして 1 つのノードがあり、期待されるシーケンスではありTexts
ませComments
ん)。Serializer
.
さて、改行が保持されるとは思っていません。実際、とにかくスクリプトタグを捨てるつもりですが、コメントを保持したい、または少なくともできるようにしたい場所が他にもあります。エスケープされたコメントが埋め込まれていないテキストを取得します。
何か案は?
更新: NekoHTML がいくつかのタグを壊していたので、JTidy に切り替えましたが、同じ問題が発生しました。ただし、興味深いことに、これはヘッダー内のスクリプト タグだけの問題です。他のコメントは問題なく届きます。そして、JTidy のせいだと私が疑う (願って祈る) 奇妙な追加の JavaScript コメントがあります。
JTidy が行っていることは、<script>
内容を CDATA に変換しているように見えます。JTidy の生の出力を stdout に送信すると、次のようになります。
java - XOM.nu設定のクローズタグ形式
要素が次のように閉じられるようにuпXom.nuを設定するにはどうすればよいですか?
<Node></Nodes>
ではありません<Node/>
。
私がこのようにしたい理由は、このXMLが、残念ながら以前の「タグを閉じる規則」を認識するツールにインポートされるためです。
java - 結果の文字列を 1 行として表示する代わりに、Element.toXML() を適切にインデントしますか?
のデフォルトの動作はElement.toXML()
、結果を 1 行で表示しているようです。結果を階層的に複数行で表示することは可能ですか?
例:
これは私が手に入れたいものです
そして、これは私が現時点で得ているものです:
ありがとう
java - XOMのクエリノード
XOMでドキュメントをクエリし、ノードを取得してから、このノードに別のノードをクエリしています。ただし、ノードのクエリは、このノードだけでなく、ドキュメント全体のクエリと同じように動作します。
XMLは次のようなものです。
そして私はこれをやっています:
そしてinnerNodes
、0人の子供が含まれています。(スラッシュを追加)に変更"/Value1"
すると"//Value1"
、異なる値1が取得されるため、選択したノードではなく、ドキュメント全体をクエリしているように見えます。
XOMで特定のノードをクエリするにはどうすればよいですか?
java - Java 完全な XML ブロックを抽出する方法
この XML の例を使用します。
ノード B の XML ブロックを抽出し、XML 文字列を返す単純なメソッドが必要です。
このノードを取得するには、XOM や Java XPath などの Java XPath ライブラリを使用する必要がありますが、完全な XML 文字列を取得する方法が見つかりませんでした。
C# を使用して 2 つの同等の回答済みの質問を見つけました: C# How to extract complete xml node set and how can I extract an XML block from an XML document?
xpath - XPathを使用して、不要な名前空間を持つドキュメントからXOM要素を抽出する
XOMを使用して外部システムから返されたHTMLを解析しようとしています。HTMLは次のようになります。
(実際にはかなり厄介ですが、このDOCTYPE宣言と、これらの名前空間および言語宣言があり、上記のHTMLは実際のHTMLと同じ問題を示します。)
私がやりたいのは、のコンテンツを抽出することです<div>
が、名前空間宣言はXPathを混乱させるようです。名前空間宣言を(手動で、ファイルから)削除すると、次のコード<div>
で問題が見つかりません。
ただし、名前空間を使用すると、返さNodes
れるサイズは0になります。
プログラムで名前空間を削除した場合はどうでしょうか。
...動作するはずですが、何もしません。javadocから:
このメソッドは、で追加された追加の名前空間のみを削除します
addNamespaceDeclaration.
さて、私はクエリに名前空間を提供すると思いました:
サイズはまだゼロです。
名前空間コンテキストを手動で構築するのはどうですか?
コンストラクターは次のXPathContext
ように爆発します。
だから、私はどちらかを探しています:
- このクエリを機能させる方法、または
- プログラムで名前空間宣言を削除する方法、または
- これらの両方が間違っていると仮定して、正しいアプローチの説明。
更新: LevLevitskyの回答とJaxenFAQに基づいて、次のハックを思いつきました。
これはまだ少し気が狂っているように見えますが、Jaxenがあなたに何かをしてほしいと思っている方法だと思います。
アップデート#2:以下に記されているように、そしてインターネット全体で、これはJaxenのせいではありません。XPathがXPathであるだけです。
したがって、このハックは機能しますが、名前空間宣言を削除する方法が必要です。できればXSLTまでは行かないでください。
java - XOM を使用して追加の親 XML 要素を挿入する
次の XML を使用します。
XPath を使用して子要素をクエリし、いくつかの条件に基づいて、それらのいくつかの上に追加の親レベルを追加します。
これを行う最善の方法は何ですか?
私は次の行に沿って何かを考えていました:
でも秩序は守りたい。parent.insertChild(child, position)
おそらく、これは?を使用して行うことができます。
編集:次のように動作すると思いますが、誰かがより良い方法を持っているかどうか知りたいです:
編集2:これは、興味のない子要素と他の要素を混在させることができるため、おそらくより良いです: