- PR -

XMLの同一性チェックについて

1
投稿者投稿内容
mine
会議室デビュー日: 2002/10/25
投稿数: 9
投稿日時: 2007-06-05 17:01
こんにちは。いつも参考にさせていただいています。

以下のように2つのXmlDocumentがあって、空タグの記述方法が違っています。
この2つのXmlDocumentが同じものであるという判断をする方法は何かないのでしょうか?

XmlDocument docA = new XmlDocument();
docA.LoadXml("<a></a>");
XmlDocument docB = new XmlDocument();
docB.LoadXml("<a />");

空タグの出力方法を統一しようとして
XmlElementのIsEmptyプロパティ、
XmlTextWriterでの指定等調べてみましたが方法が見つかりません。

XmlDocumentを頭からすべてのノードをみていって文字列もしくはXmlDocumentを
作り直さないとできないのでしょうか?

よろしくお願いします。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2007-06-05 18:08
XMLDIFF
で 検索してみましょう。どうですか
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2007-06-05 18:47
双方に Canonical XML をかけてから比較すればよいです。
.NETにも Canonical XML をするライブラリがあったと記憶してます。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-06-05 21:22
引用:

スフレさんの書き込み (2007-06-05 18:47) より:
双方に Canonical XML をかけてから比較すればよいです。
.NETにも Canonical XML をするライブラリがあったと記憶してます。


直接的に使えるのってありましたっけ?
いまいち見つからないので強引にやってみました。

コード:
            XmlDocument test1 = new XmlDocument();
            XmlDocument test2 = new XmlDocument();
            test1.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><test/>");
            test2.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><test></test>");

            SignedInfo signedInfo = new SignedInfo();
            signedInfo.CanonicalizationMethod = SignedXml.XmlDsigC14NTransformUrl;
            Transform transform = signedInfo.CanonicalizationMethodObject;

            transform.LoadInput(test1);
            Stream test1c = (Stream)transform.GetOutput();
            transform.LoadInput(test2);
            Stream test2c = (Stream)transform.GetOutput();

            System.Diagnostics.Trace.WriteLine(new StreamReader(test1c).ReadToEnd());
            System.Diagnostics.Trace.WriteLine(new StreamReader(test2c).ReadToEnd());


こんなことしていいのか問題ないのか実は内部的にものすごい無駄なことになってるのかその辺はなんにも分かりませんが。
mine
会議室デビュー日: 2002/10/25
投稿数: 9
投稿日時: 2007-06-08 08:35
返答が遅くなりました。

なちゃ様のコードを参考に比較してみたところ巨大なXMLでも
あまりリソースをくわないで実行できました。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)