■26277 / ) |
Re[2]: XMLファイルの読み込みについて |
□投稿者/ あゆみ (3回)-(2008/10/06(Mon) 13:42:27)
|
>Streetw♪様
サンプルまで頂きまして誠にありがとうございます。 ただ、頂いたサンプルですと複数のノードが存在する場合に動作がおかしくなるようです。 特に XmlNode node = doc.SelectSingleNode("/email/b"); を実行するとエラーになってノードが 取得できなくなってしまいました。
【test.xml】 <?xml version="1.0" encoding="shift_jis" standalone="no" ?> <!DOCTYPE email SYSTEM "BBB.dtd"> <email> <aa>aの値は&valueA;です。</aa> <b>bの値は&valueB;です。</b> </email>
【プログラム】 private void button1_Click(object sender, EventArgs e) { var doc = new XmlDocument();
using (var reader = new MyXmlTextReader("test.xml")) { reader.XmlResolver = null; doc.Load(reader); }
XmlNode node = doc.SelectSingleNode("/email/b"); MessageBox.Show(node.InnerXml);
}
private class MyXmlTextReader : XmlTextReader { public MyXmlTextReader(string url) : base(url) { }
public override void ResolveEntity() { // 解決しない } }
>aetos(旧シャノン)様 返信ありがとうございます。 実現したいこととしては、エンティティが格納されたXMLファイルをあらかじめ作成しておきます。 そこにプログラムでエンティティファイルを動的に作成し、XMLファイルを読み込む処理を行いたいのです。 そこで、エンティティがない状態でユーザーにXMLファイルの編集を行わせたいと考えてます。 私もXML自体詳しいわけではないのですが、エンティティの展開やXMLの検証を行わないだけで XMLファイルなるのでは?と思っていたのですが間違えなのでしょうか…
みなさん、いろいろお力を貸していただきましてありがとうございます。 私の方で調べてみたのですが、下記のようにDTDがある場合は XmlNode.InnerXml で エンティティ展開前の値が取得できました。 なので、 doc.Load("test.xml"); でDTDがない場合にエラーが発生するのを防げば解決できそうなのですが…
【test.xml】 <?xml version="1.0" encoding="shift_jis" standalone="no" ?> <!DOCTYPE email SYSTEM "BBB.dtd"> <email> <aa>aの値は&valueA;です。</aa> <b>bの値は&valueB;です。</b> </email>
【BBB.dtd】 <?xml version="1.0" encoding="shift_jis" ?> <!ENTITY valueA "AAA"> <!ENTITY valueB "BBB">
【プログラム】 private void button1_Click(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load("test.xml"); XmlNode node = doc.SelectSingleNode("/email/b"); MessageBox.Show(node.InnerXml); }
|
|