実体参照を使って、複数のxmlを取り込む
xmlは外部のxmlを取り込めるらしいというブログのエントリーを読んで、調べました。
@itさんにありました。
http://www.atmarkit.co.jp/fxml/tecs/007entity/07.html
以下のようなxml(list.xml)があった場合、2つのxml(list.xmlとitem.xml)に分ける事を考える。
list.xml
<?xml version="1.0" encoding="EUC-JP"?> <!DOCTYPE list [ <!ELEMENT list ( title, item )> <!ELEMENT title (#PCDATA)> <!ELEMENT item (atr*)> <!ELEMENT atr (key, value)> <!ELEMENT key (#PCDATA)> <!ELEMENT value (#PCDATA)> ] > <list> <title>title</title> <item> <atr> <key>key1</key> <value>value1</value> </atr> <atr> <key>key2</key> <value>value2</value> </atr> </item> </list>
まず、list.xml
DTDはそのままで、外部ファイルにするxml(item.xml)のDTDの最後に以下を追加し外部ファイルを参照するための参照を宣言する。
<!ENTITY item SYSTEM "item.xml">
また、宣言された実体を参照するには以下の方法で行う。
&item;
まとめると以下のようになる。
list.xml
<?xml version="1.0" encoding="EUC-JP"?> <!DOCTYPE list [ <!ELEMENT list ( title, item )> <!ELEMENT title (#PCDATA)> <!ELEMENT item (atr*)> <!ELEMENT atr (key, value)> <!ELEMENT key (#PCDATA)> <!ELEMENT value (#PCDATA)> <!ENTITY item SYSTEM "item.xml"> ] > <list> <title>title</title> $item; </list>
item.xml
<?xml version="1.0" encoding="EUC-JP"?> <item> <atr> <key>key1</key> <value>value1</value> </atr> <atr> <key>key2</key> <value>value2</value> </atr> </item>