任意のXMLドキュメントの読み込み・書き出しを行う
これは、InterSystems FAQサイトの記事です。
【任意のXMLドキュメントの読み込み】
任意のXMLドキュメントの読み込みを行うには、%XML.TextReaderクラスを使用します。
Parseメソッド(※ドキュメントがファイルの場合はParseFile())を使用してドキュメントをパースし、各ノードのプロパティを取得します。
例えば、下記のXMLの場合、
<emp empid="1">
<name>Suzuki</name>
<address>Tokyo</address>
</emp>
<name>Suzuki</name>
<address>Tokyo</address>
</emp>
各赤枠が、"ノード"の単位となり、

下記のようなイメージで取得することができます。
| ノード・ プロパティ名 |
seq | NodeType | Name | Value | (属性) | |
| LocalName | Value | |||||
| プロパティ値 | 1 | element | emp | empid | 1 | |
| 2 | element | name | ||||
| 3 | chars | Suzuki | ||||
| 4 | endelement | name | ||||
| 5 | element | address | ||||
| 6 | chars | Tokyo | ||||
| 7 | endelement | address | ||||
| 8 | endelement | emp | ||||
コード例:
readXML
set sc=##class(%XML.TextReader).ParseFile("C:\temp\aaa.xml",.treader)
d $SYSTEM.Status.DisplayError(sc)
while (treader.Read()) {
write treader.seq," "
write "[Type]",treader.NodeType," "
write "[Name]",treader.Name," "
write "[Value]",treader.Value," "
if (treader.NodeType="element"){
for i=1:1:treader.AttributeCount {
do treader.MoveToAttributeIndex(i)
write "[Att] ",treader.LocalName,"=",treader.Value
}
}
write !
}
quit
%XML.TextReaderについての詳細は、下記のドキュメントをご参照ください。
[ドキュメント] %XML.TextReader の使用
【任意のXMLドキュメントの書き出し】
任意のXMLドキュメントを作成(書き出し)するには、%XML.Writerを使用します。
コード例:
writeXML
set xml=##class(%XML.Writer).%New()
set xml.Indent=1
do xml.OutputToFile("C:\temp\out.xml")
do xml.RootElement("employees")
do xml.Element("emp"),xml.WriteAttribute("empid","1")
do xml.Element("name"),xml.WriteChars("Suzuki"),xml.EndElement()
do xml.EndElement() // emp
do xml.EndRootElement() // employees
quit
上記を実行すると、下記の内容のファイルが出力されます。
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<emp empid="1">
<name>Suzuki</name>
</emp>
</employees>
<employees>
<emp empid="1">
<name>Suzuki</name>
</emp>
</employees>
%XML.Writerについての詳細は、下記のクラスリファレンスをご参照ください。
[クラスリファレンス] %XML.Writer
ディスカッション (0)0