XML をデシリアライズしようとしています (下記)。
XML の「非標準」構造が原因で行き詰まっています。Products コレクションをシリアル化する通常の方法の代わりに、つまり、多くの子要素を持つ親です。それぞれに単一の子要素を持つ多くの親要素があります。
私の問題は、この異常な配列構造が原因で (バグが原因だと思われます)、意味のあるデータを抽出できるように属性 ie:[XMLArrayItem] を設定する方法がわからないことです。
注: XML は、パブリック サード パーティからの HTTPResponse です。(だから私は彼らにそれを変更させることはできません。)
具体的には: 多くの < Product> 要素を持つ < Products> 親の代わりに。
< betType> ノードには複数の < Products> 親要素があり、それぞれに 1 つの < Product> 子要素があります。
必要なプロパティを持つクラスを自由に作成できます。明らかに、ソリューションには BetType & Product クラスが必要です。Products クラスの有無にかかわらず、両方を試しました。
<rootnode>
:
<bet_types>
<bet_type id="105">
<name>Exacta</name>
<products>
<product id="17">
<name>STAB</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
<product_default>1</product_default>
</product>
</products>
<products>
<product id="25">
<name>NSW</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
</product>
</products>
</bet_type>
<bet_type id="107">
<name>Quinella</name>
<products>
<product id="18">
<name>STAB</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
<product_default>1</product_default>
</product>
</products>
<products>
<product id="26">
<name>NSW</name>
<max_stake>10000</max_stake>
<allow_multiple>0</allow_multiple>
<allow_flexi>1</allow_flexi>
</product>
</products>
</bet_type>
:
</rootnode>
他のすべての呼び出しに使用しているので、.Net C# xmlSerializer を使用するのが理想的です。このサンプルは、HTTPResponse の奥深くにネストされた小さなフラグメントです。
XSLT を使用して再フォーマットすることも考えられますが、属性を使用してそれを行う方法があることを望んでいます。私はそれがよりきれいだと思います.XSLTをどのように記述すればよいかわかりません.
注:代わりに、親配列のノードを「生成しない」方法を提案し、各配列項目のノードを作成するだけでよい場合は、それが役立ちます。私が試したアプローチの1つとして、本当に近づいてきました。しかし、それぞれが 1 つの Product ノードを含む複数の Products ノードの親である "Products" ノードがまだありました。
ご協力いただきありがとうございます。