問題タブ [xml-deserialization]
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# - SQL Server 2008 からの親 + 子オブジェクトの作成 (XML 経由?)
オブジェクトで構成される単純な DAL があります。このオブジェクトには、受信した問い合わせ (XML) を処理して DB に書き込むために使用されるオブジェクトがSalesEnquiry
含まれます。ここまでは順調ですね。List<T>
Vehicle
ただし、この DB 内のデータをさらに処理する別のアプリを作成しているので、これらの同じ DAL オブジェクトを使用してデータを取得および操作したいと考えています。
従来のレコードセットを返してそれらを反復処理し、SalesEnquiry/Vehicle オブジェクトの各プロパティを手動で入力するのではなく、SQL Server からデータを XML として返して逆シリアル化できると考えました。私はすでにこの手法を使用して、最初に着信データを処理しています。
ただし、SQL Server で適切な XML を構築できるかどうか、またはどのように構築できるか、または 2 段階で構築する必要があるかどうかはわかりません。
以下は、問い合わせを XML として抽出します。
以下は、関連する車両を XML として抽出します。
結果のXMLは次のとおりです。
これを SQL Server で作成できますか、それとも DAL で手動で作成する必要がありますか?
アップデート:
Shuntyの提案に続いて、私は以下を使用しています:
..近づくことはできますが、まだ十分ではありません:
逆シリアル化を成功させるには、要素を親要素<vehicle>
の下に配置する必要があります。<vehicles>
SQL が適切な XML を作成できるようにする方法が必要です...
.net - XmlSerializer は、空の文字列を持つ属性をゼロに逆シリアル化します
XmlSerializer を使用し、空の文字列値を持つ属性を int のゼロにデシリアライズしたいと思います。空の文字列を持つ属性の逆シリアル化に関して私が見たすべての質問には、null 許容 int を null に設定することが含まれますが、null 非許容 int を null ではなくゼロに設定したいと考えています。
IXmlSerializable を実装せず、すべて自分で処理するだけでこれを行う簡単な方法はありますか?
c# - シリアル化されたデータの逆シリアル化が失敗するのはなぜですか?
Silverlight でオブジェクトをシリアライズおよびデシリアライズしようとしていますが、うまく動作しないようです。シリアル化は問題なく機能しますが、rootObject が予期されていないと文句を言います。XML を生成したのは Silverlight であるため、わかりません。
ところで; 私はまだC#に不慣れです
次のようなクラスがあります。
Silverlight でシリアル化すると、以下が生成されます。
ただし、逆シリアル化しようとすると、次のようになります。
System.InvalidOperationException はユーザー コードによって処理されませんでした Message=XML ドキュメントにエラーがあります (2, 2)。
InnerException: System.InvalidOperationException Message= <DataStorage xmlns=''
> は予期されていませんでした。
私の逆シリアル化コードは次のとおりです。
何か案が?
c# - XML装飾を使用して、逆シリアル化中にデフォルト値を指定する
一部のXMLの逆シリアル化に問題があります。サードパーティによって提供されるXMLは非常に冗長であるため、特定の要素に値が設定されていない場合は、要素を提供して空にします(例<element1 />
)。
これは、整数を格納することを目的とした要素など、特定の要素の問題です。私はサードパーティを管理しているので、サードパーティにデフォルト値(<myinteger>0</myinteger>
)を指定させるか、これらの要素を完全に省略させることができます。これらは両方とも問題を回避する必要があります。
ただし、将来、あまり制御できない状況が発生する可能性があります。その場合、おそらく装飾を介してデフォルト値を指定する方法はありますか?
java - XMLの読み込みは非常に遅い
単純なテキストファイルを使用してドキュメントを保存していたデータストレージを継承しました。
ドキュメントにはいくつかの属性(日付、タイトル、テキスト)があり、これらはファイル名<date>-<title> .txtにエンコードされており、ファイルの本文はテキストです。
ただし、実際には、システム内のドキュメントにはさらに多くの属性があり、さらに多くの属性を追加することが提案されています。
XML形式に切り替えるのは理にかなっているようで、私はそうしました。各ドキュメントは、独自のXMLファイルにエンコードされています。
ただし、XMLからのファイルの読み込みは、途方もなく遅くなりました。(.txt形式の2000の記事は数秒かかりましたが、.xml形式の2000の記事は10分以上かかります)。
私はDOMパーサーを使用していましたが、読み取りがどれほど遅いかを発見した後、SAXパーサーに切り替えましたが、それでも同じくらい遅いです(まあ、高速ですが、それでも10分です)。
XMLはそれだけ遅いですか、それとも私は何か奇妙なことをしていますか?どんな考えでもいただければ幸いです。
システムはJavaSE1.6で記述されています。パーサーは次のように作成されます。
c# - How do you deserialize Transunion XML?
Here is my attempt, xsd and classes created from xsd.exe
Running my code I get error "There is an error in XML document (1, 2)." Inner exception {" was not expected."}
Any help would be greatly appreciated.
Thanks!
XML Snippet:
XSD Snippet:
Class Snippet:
Code Snippet:
c# - 少し重要なデータ構造: XmlSerializer は私に適していますか?
私は現在XmlSerializer
、驚くべきことに:)、データ構造の逆シリアル化を処理するために使用しています-使用するのは非常に簡単ですが、柔軟性が犠牲になっています。現時点では、ツリーベースの構造に使用しています。はXmlSerializer
循環構造を処理しない[XmlIgnore]
ため、Parent
プロパティに追加し、ツリーに対してデシリアライゼーション後の反復を実行して、ノードの親を修正しました。
を使用してこれを処理するより良い方法はありますXmlSerializer
か、または を使用してコードを書き直す方がよいでしょうXmlReader/XmlWriter
か? 実装IXmlSerializable
はうまくいくと思いますが、かなりの量の作業のように思えますが、XmlSerializer
.
現在のデシリアライゼーション後の手順は問題ありませんが、別の XML ファイルにシリアライズする必要があるデータ構造を追加しています。基本的には、前のツリー構造のノードを参照する Parent プロパティを必要とする項目のフラット リストです。これには、デシリアライゼーション後の手順が必要であり、Parent 属性と ParentId (またはいくつかのトリック) の両方を新しいデータ構造に保持する必要があります。
では、スマートな (そして壊れにくい) アイデアはありますか? それともXmlReader/XmlWriter
そうですか?
解決
DataContractSerializer
XmlSerializer とほぼ同じシンプルさで、かなりまともなソリューションであることが判明しました。自動サイクル処理を使用しないことにしましたが、代わりに、親ノードの設定を処理するOnDeserialized装飾メソッドを定義して使用しました。そうすれば、生成された XML は標準に準拠しています。
しばらく私を混乱させたことの 1 つは、バッキング メンバーが null に設定されている状態で、デシリアライズ後にいくつかのプロパティでクラッシュが発生したことでした。デバッグすると、コンストラクターが呼び出されないことが示されました。いくつかのグーグル検索の後、説明付きのこの SO 投稿を見つけました。
java - XML データをオブジェクトに直接アンマーシャリングする
SimpleXML を使用して、Java で XML オブジェクトからデータを非整列化しようとしています。全体の要点は、API を JAXB から SimpleXML に変換することでした。したがって、ドキュメントを解析する注釈の方法を使用しました。ここにいくつかのコードがあります:
ユーザー クラスで:
API を作成したプログラマーは、DateAdapter を使用して、XML から取得した文字列を直接日付に変換しました。SimpleXML に変換してみました。私の仮定は、トランスフォーマーが同じアプローチを使用したということです。これが前後のコードです...
前:
後:
解析不能な日付エラーが発生しているため、間違った変換を行ったと思います。奇妙な点は、読み取りおよび書き込みメソッド内に if-else または try-catch ブロックを配置しても、エラーが発生することです。
したがって、主な問題は、XML の文字列と Date オブジェクトの間でマーシャリング/アンマーシャリングを行う JAXB アダプタのようなアダプタを適切に作成するにはどうすればよいかということだと思います。
c# - 子Xml要素が逆シリアル化されていません
問題
xmlを逆シリアル化するときに問題が発生し、子要素の1つが逆シリアル化されていません。xmlに入力されているにもかかわらず、クラスインスタンスではnullです。
少し背景
XsdObjectGeneratorを使用して、.xsdに基づいてpocoクラスを作成しました。その後、xmlをクラスインスタンスに逆シリアル化し、オブジェクトを操作することができました。
自動生成されたクラスを「TFS」という名前空間でラップして変更しました。
プロジェクトのある時点で、子要素の1つを「COM」と呼ばれる独自の名前空間に配置する必要があることがわかりました。
次にxmlをクラスインスタンスに逆シリアル化しようとしたとき、子要素は逆シリアル化されていません。
これは、子要素の名前空間がCOMに変更されたTFSクラスコードの適切なスニペットです。また、TFS名前空間に残る親要素OrdDtlも含まれます。
独自のファイルに含まれているCOM名前空間のAcctSetup宣言は次のとおりです。
これが私の逆シリアル化関数です:
COM.AcctSetup要素を逆シリアル化するための支援をいただければ幸いです。追加の情報やコードサンプルが必要な場合はお知らせください。
java - Java でファイルから SOAP エンベロープをアンマーシャリングする
wsimport によって生成された Web サービス タイプを独自のドメイン オブジェクトにマッピング/変換するマッパー オブジェクトを単体テストしたいと考えています。また、SOAP 障害などのエラー シナリオもテストしたいと考えており、本物の SOAP 応答でマッパー オブジェクトをテストするのが最善だと考えています。これには Web サービスへのアクセスが必要であり、各テストの往復時間がかかるため、Web サービス自体に要求を発行したくありません。
このシナリオでは、SOAP エンベロープを含む特定の XML ファイルから SOAP メッセージを非整列化しようとしています。SOAP エンベロープをアンマーシャリングし、ボディ内のペイロードを対応する Java タイプに変換したいと考えています。
JAXB アンマーシャリングを使用してペイロード自体をアンマーシャリングすることはできましたが、SOAP 障害のある SOAP 応答を同様に処理できるようにする方法が見つかりませんでした。
SOAP Envelope XML ファイルを使用してマッパーを簡単にテストできる方法はありますか?