問題タブ [xmldocument]
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.
c# - Web サービスに適した XML 型はどれですか?
現在の実装
SQL Server 2005 データベースには、xml 型の MessageXml という列を持つ、messages というテーブルがあります。
XElement 型の MessageXml というフィールドを持つ Message というクラスを生成する Linq to Sql クラスを含む C# ライブラリ プロジェクト。
XElement 型の MessageXml というプロパティを持つ MessagePayload クラスを公開する WCF Web サービス。
Web サービスは、Linq によって作成された Message クラスを SQL に提供しません。その中間として軽量のオブジェクトを使用します。
質問
XElement は本当に WCF サービスで使用したい型ですか、それともより良い型がありますか。サービスに渡す予定の xml は、完全なドキュメントである必要があります。また、xml ドキュメントを XElement としてロードするのに少し問題があります。サービスの軽量クラスで完全な xml ドキュメント タイプを公開する必要があると思いますが、XDocument と XmlDocument の違いについて少し混乱しています。
その上、シリアル化できない XDeclaration 型のプロパティが含まれているため、XDocument 型のプロパティを持つ WCF Message クラスを公開できません。
XmlDocument を使用する場合、Linq クラスと軽量クラスの間の変換で、xml 型のこの奇妙な変換を行う必要があります。
XmlDocument は正しいもののように思えます。翻訳を行う必要があることはわかっていますが、可能な限り適切に近づけたいと考えています。
c# - デフォルト以外の名前空間にノードを追加すると、修飾子が重複する
新しい既定の名前空間が定義されている要素を含む既存の XmlDocument を書き直しています (下記の assemblyBinding 要素を参照)。
名前空間を再修飾することなく、この「assemblyBinding」要素に新しいノードを追加できるようにする必要があります (結果のファイルを app.config ファイルとして扱うときに、.net ランタイムが Xml を無効と見なすため)。
これは私が欲しいものです:
...「dependentAssembly」要素は、その親の名前空間を継承します。
XmlDocument.CreateElement("dependentAssembly"); を呼び出した後。または XmlDocument.CreateElement("dependentAssembly", "urn:schemas-microsoft-com:asm.v1"); または XmlDocument.CreateElement("asm", "dependentAssembly", "urn:schemas-microsoft-com:asm.v1");
私はこのようなものを取得し続けます...
欲しいものを手に入れるにはどうすればいいですか?
c# - C#XmlDocumentノード
UPS追跡情報にアクセスしようとしていますが、その例のように、次のようなリクエストを作成する必要があります。
C#で1つのXmlDocumentを使用してこれを作成する際に問題が発生しました。2番目を追加しようとすると:
<?xml version="1.0" ?> or the <TrackRequest>
エラーがスローされます:
System.InvalidOperationException:このドキュメントにはすでに「DocumentElement」ノードがあります。
これは、標準のXmlDocumentにはルートノードが1つしかないためだと思います。何か案は?
これまでの私のコードは次のとおりです。
asp.net - Xml ドキュメントを含む大きなオブジェクト ヒープ
これはおそらく、 .NET コレクションとラージ オブジェクト ヒープ (LOH)に沿ったものです。
.Net では、xml が base64 に変換されるときに ~200KB のテキスト ドキュメントを作成する文字列を含む XmlDocument を読み込んでいます。ポイントは、文字列を大きなオブジェクト ヒープに割り当てる必要があることです。ここでの比較を読むと、XmlReader が文字列を読み取る最も効率的な方法であることがわかりますが、XmlDocument はおそらく、より多くの機能 (xpath) を使用して、より簡単に読み取ることができます。
私の XML の各ノードは、かなり小さな文字列である必要があり、大きなオブジェクト ヒープにはほど遠いものです。Lutz .Net Reflector を使用すると、XmlDocument が内部的にリンクされたノードを使用しているように見えます。
最後に、私の質問: ~200 KB (>85000 バイト) を節約するこの文字列をロードすると、XmlDocument の使用時にさらに別のオブジェクトが LOH に発生します。ヒープが断片化して OOM エラーが発生することが少し心配です。それとも、XmlDocument がたまたま (少なくとも私が求めているデータの場合)、マネージ ヒープに多くのオブジェクトを作成するのでしょうか?
xml - xml ストリームの読み取り
申し訳ありませんが、同じような質問をもう一度します。次の XML ドキュメントを読み込もうとしています。
4 人のプレイヤーがそれぞれ欲しい値を持っていますが、各プレイヤーの個別のステータスではなく、同じステータスしか取得できません。誰か助けてください。大変感謝します
c# - xml とファイル オン ディスク インタラクション
これを行う必要があったので、コードからファイルに XMLDocument を書き込む古い学校の方法を調べていました。
私のアプリケーションでは、新しい要素と値を含む XML ドキュメントに大量に書き込み、定期的にディスクに保存し、ファイルから読み取り、データに応じて処理を行っています。
File.Exists(...) _xmldoc.LoadFile(..) などのメソッドを使用しています...
おそらく今では、これに関してより良い方法があるのではないかと思っています
- XML の解析
- 保存するためのフォーマットの確認
- 保存されるデータがテキストとして扱われるのではなく、XML として扱われます。
多分私がやっていることは問題ありませんが、しばらくの間、他の方法があるかどうか疑問に思いました:)
ありがとう
c# - 互換性のないさまざまな形式の Xml ベースのドキュメントをどのように管理すればよいですか
Xmlベースの形式でドキュメント(Wordドキュメントを考える)を保存するアプリケーションがあります-現在、xsdファイルから生成されたC#クラスは、ドキュメント形式の読み取り/書き込みに使用されており、最近まで形式を変更する必要がありました。ドキュメント。アプリケーションの将来のバージョンは、以前のすべてのバージョンで保存されたドキュメントを読み取ることができる必要があり、理想的には、アプリの古いバージョンでも、アプリの将来のバージョンによって保存されたドキュメントの読み取りを適切に処理できるようにする必要があるため、私の懸念は下位互換 性です。
たとえば、ドキュメントのスキーマを変更して (オプションの) 余分な要素をどこかに追加すると、古いバージョンのアプリケーションは余分な要素を単純に無視し、問題は発生しません。
ただし、重大な変更が行われた場合 (たとえば、属性が要素または要素のコレクションに変更された場合)、アプリの過去のバージョンでは、オプションの場合はこの要素を無視するか、ユーザーにしようとしていることを通知する必要があります。それ以外の場合は、アプリの新しいバージョンで保存されたドキュメントを読みます。また、これは現在、私のアプリのすべての将来のバージョンで、2 つの異なるドキュメントを読み取るために完全に別のコードが必要になるため、頭痛の種になっています。
このような変更の例は、次の xml です。
変更:
将来のサポートの問題を回避するために、将来行う可能性のある変更を処理するための適切な戦略を考え出したかったので、現在リリースしているアプリのバージョンがこれらの変更に対処できるようになります将来:
- ドキュメントの「バージョン番号」をドキュメント自体に保存する必要がありますか? もしそうなら、どのバージョン管理戦略を使用する必要がありますか? ドキュメントのバージョンが .exe アセンブリのバージョンと一致する必要があるか、またはより複雑な戦略を使用する必要があります (たとえば、メジャー リビジョンの変更は破壊的変更を示し、マイナー リビジョンの増分は破壊的でない変更を示します。たとえば、追加のオプション要素など)。
- ドキュメント自体を読むにはどのような方法を使用すればよいですか? また、ドキュメントの異なるバージョンで大量のコードを複製しないようにするにはどうすればよいですか?
- XPath が最も柔軟であることは明らかですが、単純に xsd でクラスを生成するよりも、実装に多くの作業が必要です。
- 一方、DOM 解析が使用されている場合、重大な変更ごとにソース管理でドキュメント xsd の新しいコピーが必要になり、古いスキーマに修正を適用する必要がある場合に問題が発生します (アプリの古いバージョンは引き続きサポートされます)。 .
また、私が行うすべての変更は、これらすべての変更が「ビーキング変更」と「非破壊的変更」の 2 つのカテゴリに分割できるという仮定に基づいて、これらすべてを非常に大まかに作業しましたが、これが安全な仮定であると完全に確信しているわけではありません作る。
私が「ドキュメント」という用語を大まかに使用していることに注意してください。内容はドキュメントとはまったく似ていません。
あなたが私に提供できるアドバイスをありがとう。
.net - .NET で、UTF-16 XMLDocument を BOM 付きの文字列に書き込む方法
xml ドキュメントを使用して、.NET でオンザフライでXmlDocumentを構築しています。次に、それをXslCompiledTransformのTransform()メソッドで変換します。
Transform() メソッドは、エンコーディングに対して無効な文字がストリームで見つかったため、例外をスローしました。Visual Studio の TextVisualizer を使用して文字列をコピーしてAltova XmlSpyに貼り付けると、エンコーディングの問題が見つかりません。
ドキュメントに UTF-16 ヘッダーを追加して UTF-16 としてレンダリングし、結果のテキストから Transform を呼び出して、BOM について不平を言うようにしました。以下は、私が使用したコードの簡略版です。
その結果、次のように文字列に書き込んでいます。
BOM を追加したり、BOM を気にしないように XslCompiledTransform.Transform を取得するにはどうすればよいですか?
c# - C#でCDATAセクションをデコードする
私は次のようにXMLを少し持っています:
を使用してアクセスしてcurXmlNode.SelectSingleNode("description").InnerTextいますが、値が返されます
CDATAセクションからそのような出力を取得する簡単な方法はありますか?実際のCDATAタグを除外すると、同じように返されるようです。