- PR -

XmlTextReaderでエンティティの情報を取得する方法

1
投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2003-11-20 17:41
お世話になっております。
XmlTextReaderでエンティティの情報を取得する方法を知りたいのですがどうやれば良いのでしょうか?

例えば次のような置換文字列エンティティがあったとします。
<!DOCTYPE root [
<!ENTITY W3C "World Wide Web Consortium">
]>

Read()で読み進めてここにくるとXmlNodeTypeは「DocumentType」が入り、Nameには「root」、Valueには「!ENTITY W3C "World Wide Web Consortium"」
が入るようです。
このValueの文字列をエンティティ名(W3C)とその値(World Wide Web Consortium)に分割して取得したいのですがXmlTextReaderにはそのような機能はないのでしょうか?







Atsushi.Eno
ベテラン
会議室デビュー日: 2003/04/23
投稿数: 60
投稿日時: 2003-11-21 00:26
私の知る限り、XmlTextReaderだけでは無理ですね。

XmlDocumentを生成して、DTDのノードだけ生成して調べてはどうでしょうか?

↓一応動作は確認しました。

コード:
string GetEntityValue (XmlReader xr, string entityName)
{
  if (xr.NodeType != XmlNodeType.DocumentType)
    return null;
  XmlDocument doc = new XmlDocument ();
  XmlDocumentType doctype = doc.CreateDocumentType (
    xr.Name, xr ["PUBLIC"], xr ["SYSTEM"], xr.Value);
  doc.AppendChild (doctype);  // コレは必要らしい
  XmlEntity n = doctype.Entities.GetNamedItem (entityName) as XmlEntity;
  return (n != null) ? n.InnerText : null;
}



# ENTITYがLiteralValueでないと正しい結果になりません。悪しからず
1

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