問題タブ [outerxml]

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 投票する
11 に答える
154316 参照

c# - XmlDocumentから改行を含むインデントされたXMLを取得する最も簡単な方法は何ですか?

を使用してXMLを最初から作成するとXmlDocumentOuterXmlプロパティにはすでにすべてが改行で適切にインデントされています。ただし、LoadXml非常に「圧縮された」XML(改行やインデントなし)を呼び出すと、の出力はOuterXmlそのままになります。それで ...

のインスタンスから美化されたXML出力を取得する最も簡単な方法は何XmlDocumentですか?

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

.net - System.Xml.XmlDocument、System.Xml.XPath.XPathNavigator{ReplaceSelf、OuterXml}: ドキュメント内のプレースホルダーの置き換え

私は現在、約 1 年ほど前に仕事のために書いた Web アプリケーションを保守しています。基本的に、ユーザーはカスタム XHTML レポート テンプレートを作成できます。XmlDocument、、などを使用しますXPathNavigator。アル。プレースホルダーをデータで検証、サニタイズ、および置換します。

ほとんどの場合は問題なく動作しますが、プレースホルダー要素を実際にデータに置き換えているのではなく、プレースホルダーのテキストをデータ テキストに置き換えていることに気付きました。

考案された例:

なるだろう...

テンプレートは 1 回しか処理されなかったため、これは以前は実際には問題ではありませんでした。ユーザーが選択したデータのセットに対して実行することを選択したとき。ただし、現在は、結果の出力をプレビューして、印刷する前に変更するオプションを提供しています。この結果、置換エンジンによって複数回処理されます。最初に元の出力を生成し、変更された出力が「印刷」されるときに再度処理されます。置換エンジンは、実際にはデータであるプレースホルダーを見つけ、置換する対応するデータ要素を見つけることができず、プロセスは例外で失敗します。

元のコードでは、XPathNavigator.InnerXmlプロパティを使用して、プレースホルダー要素の内容を "{CompanyName}" から "Castopulence" に変更しました (例):

したがって、このプレースホルダー要素を完全に置き換えたい場合は、代わりに次を使用するのが合理的ですXPathNavigator.OuterXml

これはほとんどの場合に機能するように見えますが、少なくとも私は機能すると思いますが、一見ランダムな置換により、常にSystem.InvalidOperationException「操作の結果としてコンテンツが生成されません」というメッセージがスローされます。そのため、それらのいずれかが機能しているとは確信していませんが、以前の置換に対して例外がスローされていないため、機能していると思います。

これが何を意味するのかよくわかりません。Google には、例外メッセージの正確なフレーズの結果が 4 つしかありません。それぞれ、私が話せない言語で書かれています。それらをGoogleで翻訳すると、関連するものは何も明らかになりませんでした。

実験的に試してみXPathNavigator.ReplaceSelfましたが、同じことを達成しているようですが、残念ながら同じ内部呼び出しから同じ例外がスローされます。

どちらの場合もスタック トレース:

System.Xml.DocumentXmlWriter.Close (WriteState currentState)
で System.Xml.XmlWellFormedWriter.Close()
で System.Xml.XPath.XPathNavigator.ReplaceSelf (XmlReader newNode)
で System.Xml.XPath.XPathNavigator.ReplaceSelf (文字列 newNode) で
...プライベート アプリケーションのシンボルを切り取った...

スローされる例外については、MSDN リファレンスReplaceSelf説明されていますが、スローされる唯一のSystem.InvalidOperationException例外は、「XPathNavigator が要素、テキスト、処理命令、またはコメント ノードに配置されていない」場合です。Visual Studio デバッガーから、要素に配置されていることを確認できます。私のコードは同意します。XPathNavigatorプレースホルダーを指している は、実際には のクローンです(System.Xml.XPath.XPathNodeIterator.Currentこれらはすべてリストに追加され、配列に変換され、置換フェーズで反復処理されます)。

何が問題なのか (例外は実際には何を意味するのか)、どうすれば修正できますか?

追加:実際に例外をスローしているクラス ( System.Xml.DocumentXmlWriter) は、MSDN で文書化されていないようです (少なくとも、Google 検索でも MSDN 検索でも見つかりませんでした)。

追加:問題を引き起こしている 1 つの置換のデータは、単一のスペース (つまり、" ") であると判断しました。なぜこれが の問題になるのかはわかりませんがXPathNavigator、どうやらそれは... 空の文字列 (つまり、"") も同様のようです。おそらく問題は、要素を空白だけに置き換えようとすることです。なぜそれが問題になるのかわかりません。

0 投票する
0 に答える
204 参照

equivalent - ASP.NET 1.1 - XPathNavigator OuterXml と同等

Google Maps API を使用して 1.1 で GeoCode ルックアップを行っていますが、XPathNavigator オブジェクトでレンガの壁にぶつかっています。

「サブナビゲーター」を作成して、返される Address の精度に応じて xml スキーマが変化するため、ノード (例: //adr:PostalCodeNumber) のグローバル xpath 検索を実行できるようにする必要があります。

応答の例を次に示します。

この 2.0 のコード ブロックがあり、OuterXml プロパティに相当する 1.1 を見つけようとしています。

このブログ記事を見つけましたが、SerializableXPathNavigator ソースへのリンクは無効になっています。=(

http://www.tkachenko.com/blog/archives/000155.html

私の初心者で申し訳ありませんが、独自の OuterXml メソッドを使用して独自の SerializableXPathNavigator クラスを作成するにはどうすればよいでしょうか?

どうもありがとうございました。

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

xml - XmlNode InnerXml と OuterXml

私は奇妙な状況に出くわしました。私よりもよく理解している誰かがそれを解決するのを手伝ってくれることを願っています.

Microsoft Word で開くことができるように、Xml ドキュメントに画像を挿入しています。この一環として、画像を含む要素にマップする Xml 'Relationship' を追加する必要があります。簡単です。

次のようなノードを追加しています。

ただし、最終的な .doc ファイルでは、同じ行が次のように表示されます。

つまり、空の xmlns="" 属性が含まれるようになりました。

これは、Word が文書が破損していると判断し、開くことを拒否するのに十分です。ファイルを手動で開いてその属性を削除すると、ファイルが開きます。

明らかに、プログラムで削除したいのです:-)だから、親ノードを見つけました。これは私の理解が少しぼやけているところです。OuterXml要素にはノードとそのすべての子のコンテンツが含まれ、InnerXmlには単に子が含まれていると信じていました。

これが私が見ているものです (エスケープ文字は、Visual Studio のテキスト ビューアーから切り取ったためであることに注意してください)。

OuterXml:

インナーXml:

6 番目の最後の要素の OuterXml には誤った xmlns="" が含まれているが、InnerXml には含まれていないことに注意してください。InnerXml は簡単​​に変更できますが、OuterXml は変更できません。

したがって、私の究極の質問は「この追加された属性を取り除くにはどうすればよいですか?」ですが、(コンテナは別として) 内部と外部の Xml に違いがある理由を誰かが説明できることを願っています。