- 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でも
あまりリソースをくわないで実行できました。
どうもありがとうございました。
|