ここに私のXMLがあります:
<notebooks>
<notebook>
<is-default type="boolean">true</is-default>
<name>James's notebook</name>
<id>MS4zfDEvMS9Ob3RlYm9va3wzLjM=</id>
</notebook>
<notebook>
<is-default type="boolean">false</is-default>
<name>James alternate notebook</name>
<id>NDQuMnwzNC8zNC9Ob3RlYm9va3wxMTIuMg==</id>
</notebook>
<notebook>
<is-default type="boolean">false</is-default>
<name>Notebook for James lab</name>
<id>NTMuM3w0MS80MS9Ob3RlYm9va3wxMzUuMw==</id>
</notebook>
</notebooks>
ここで見つけた標準の DataSet ロードを実行しています。
DataSet ds = new DataSet();
ds.ReadXml(new StringReader(lcXMLSegment));
「ノートブック」テーブルが「名前」と「ID」の列だけで終わることを除けば、問題なく動作します。各要素から type="boolean" を削除しない限り、列「is-default」は表示されません。
ReadXml() を実行する前に DataTable スキーマを作成しようとしましたが、DataSet.ReadXml() がデータ セット内のテーブルを再作成すると想定しているため、何もしません。また、 ReadXml() でさまざまな2番目のパラメーターを試して、スキーマを読み取ったり推測したりしましたが、違いはありません(またはエラーがスローされます)。
この XML は、アクセスしてカスタム プログラミングを実行したい Web API から返されるものであるため、XML のネイティブ構造を制御することはできません。「is-default」フィールドがブール型として取り込まれなくても問題ありません。文字列型のすべてのデータを処理できるからです。また、XML からロードしたデータの完全なスキーマを作成することも問題ありませんが、この場合、どこでどのようにそれを行うのかわかりません。