掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DataSetのカラムに設定されている順番でXmlを出力するには? (ID:146845)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつも参考にさせていただいています。 元となるXMLを読み込み値を設定して 新しくXMLファイルを書き出したいです。 調べた結果DataSetにベースとなるXMLを読み込み DataRowに値を設定して書き出すという方法が簡単だったので とりあえず読み込んで書き出すだけのプログラムを作成しました(抜粋) '入力・出力ファイル指定 Dim LoadFile As String = "input.xml" Dim CreateFile As String = "output.xml" 'XML読み込み Dim dSet As New DataSet dSet.ReadXml(LoadFile) 'XMLの設定 Dim st As New XmlWriterSettings With st 'インデントにタブを指定 .Indent = True .IndentChars = ControlChars.Tab End With Using writer As XmlWriter = XmlWriter.Create(CreateFile, st) 'Xml書き込み dSet.WriteXml(writer) writer.Close() End Using dSet.Dispose() これを実行すると元のファイルと違う並び順で出力され VSで開くと電子署名のSignatureValueで警告がでています。 要素 名前空間 'http://www.w3.org/2000/09/xmldsig#' の 'Signature' には無効な子要素 名前空間 'http://www.w3.org/2000/09/xmldsig#' の 'SignatureValue' が含まれています。必要とされる要素は 名前空間 'http://www.w3.org/2000/09/xmldsig#' の 'SignedInfo' です。 これは並び順が違うことが原因のようで 元ファイルと同じ順番に入れ替えると警告は消えます。 読み込みの時点では順番は問題無いようですが (DataColumnの値をチェックしました) 属性が指定されていると書き出すときに後回しにされてしまっているようです。 元ファイルと同じ順序で出力することはできないのでしょうか? XMLの内容は勝手ながら掲載できないのですが リンクの「結果の包含 XML 署名は次のとおりです。」の下のデータで試しても同じ現象が起きました。 http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/xmldsig/XMLDigitalSignature.html あと特に問題はないと思うのですが 元ファイルは値が空の場合は<hoge/>なのに 出力ファイルは<hoge></hoge>になっています。 XmlWriterSettingsに設定するのかな?と探してみたのですが見当たらないようです。 元ファイルのように省略させることは可能でしょうか? XML自体よく分かっていないので 説明不足な点があるかもしれませんがよろしくお願い致します。 XpPro sp3/VB2008/WinForm
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.