記事
· 2024年3月18日 3m read

任意のXMLドキュメントの読み込み・書き出しを行う

これは、InterSystems FAQサイトの記事です。

【任意のXMLドキュメントの読み込み】
任意のXMLドキュメントの読み込み・書き出しを行うには、%XML.TextReaderクラスを使用します。
Parseメソッド(※ドキュメントがファイルの場合はParseFile())を使用してドキュメントをParseし、各ノードのプロパティを取得します。

例えば、下記のXMLの場合、

 <emp empid="1">
    <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>


[クラスリファレンス] %XML.Writer
 

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください