Kuina-chan

くいなちゃん2018年12月11日


プログラミング言語Kuin」の言語仕様108、「xmlライブラリ」についてです。

1xmlライブラリ

XMLを読み書きするライブラリ「xml.kn」を解説します。
名前 説明
xml@Node XMLのツリーのノードクラス
xml@Node.addChild 子ノードを追加するメソッド
xml@Node.delChild 子ノードを削除するメソッド
xml@Node.findChild 子ノードを先頭から検索するメソッド
xml@Node.findChildLast 子ノードを末尾から検索するメソッド
xml@Node.findNext 次の兄弟ノードを検索するメソッド
xml@Node.findPrev 前の兄弟ノードを検索するメソッド
xml@Node.firstChild 最初の子ノードを取得するメソッド
xml@Node.getAttr 属性を取得するメソッド
xml@Node.getName ノードの名前(タグ名)を取得するメソッド
xml@Node.getValue ノードの値(タグで囲まれた中身)を取得するメソッド
xml@Node.insChild 子ノードを挿入するメソッド
xml@Node.lastChild 最後の子ノードを取得するメソッド
xml@Node.next 次の兄弟ノードを取得するメソッド
xml@Node.parent 親ノードを取得するメソッド
xml@Node.prev 前の兄弟ノードを取得するメソッド
xml@Node.setAttr 属性を設定するメソッド
xml@Node.setName ノードの名前(タグ名)を設定するメソッド
xml@Node.setValue ノードの値(タグで囲まれた中身)を設定するメソッド
xml@Xml XMLのツリーのクラス
xml@Xml.root 最初のルートノードを取得するメソッド
xml@Xml.save XMLファイルに保存するメソッド
xml@makeXml XMLクラスのインスタンスをファイルから作成する関数
xml@makeXmlEmpty XMLクラスのインスタンスを新規に作成する関数

2xml@Node

「xml@Node」は、XMLのツリーのノードクラスです。

2.1xml@Node.addChild



「xml@Node.addChild」は、子ノードを追加するメソッドです。

func addChild(name: []char): xml@Node

name ノードの名前(タグ名)。 nullであってはならない
戻り値 追加したノード

2.2xml@Node.delChild



「xml@Node.delChild」は、子ノードを削除するメソッドです。

func delChild(node: xml@Node)

node 削除する子ノード。 nullであってはならない
nodeが子ノードでなかった場合は何もせずに抜けます。

2.3xml@Node.findChild



「xml@Node.findChild」は、子ノードを先頭から検索するメソッドです。

func findChild(name: []char): xml@Node

name 検索するノードの名前(タグ名)
戻り値 見つかった子ノード。 1つも見つからなかった場合はnullが返る

2.4xml@Node.findChildLast



「xml@Node.findChildLast」は、子ノードを末尾から検索するメソッドです。

func findChildLast(name: []char): xml@Node

name 検索するノードの名前(タグ名)
戻り値 見つかった子ノード。 1つも見つからなかった場合はnullが返る

2.5xml@Node.findNext



「xml@Node.findNext」は、次の兄弟ノードを検索するメソッドです。

func findNext(name: []char): xml@Node

name 検索するノードの名前(タグ名)
戻り値 見つかった子ノード。 1つも見つからなかった場合はnullが返る

2.6xml@Node.findPrev



「xml@Node.findPrev」は、前の兄弟ノードを検索するメソッドです。

func findPrev(name: []char): xml@Node

name 検索するノードの名前(タグ名)
戻り値 見つかった子ノード。 1つも見つからなかった場合はnullが返る

2.7xml@Node.firstChild



「xml@Node.firstChild」は、最初の子ノードを取得するメソッドです。

func firstChild(): xml@Node

戻り値 最初の子ノード。 子が1つも存在しない場合はnullが返る

2.8xml@Node.getAttr



「xml@Node.getAttr」は、属性を取得するメソッドです。

func getAttr(attrName: []char): []char

attrName 属性の名前
戻り値 attrNameで指定した属性の値。 属性が存在しなかった場合はnullが返る

2.9xml@Node.getName



「xml@Node.getName」は、ノードの名前(タグ名)を取得するメソッドです。

func getName(): []char

戻り値 ノードの名前(タグ名)

2.10xml@Node.getValue



「xml@Node.getValue」は、ノードの値(タグで囲まれた中身)を取得するメソッドです。

func getValue(): []char

戻り値 ノードの値(タグで囲まれた中身)。 タグの中身が空の場合はnullが返る
「<a>b<c />d</a>」のように、タグの中にテキストとタグが入り混じっていた場合、最初のタグまでのテキスト("b")を「ノードaの値」として扱い、それ以降にあるテキスト("d")はデータとして維持はされますが取得も設定もできません。
このようにタグの中にテキストとタグが入り混じることは、データ構造が複雑になるため避けたほうが無難です。

2.11xml@Node.insChild



「xml@Node.insChild」は、子ノードを挿入するメソッドです。

func insChild(node: xml@Node, name: []char): xml@Node

node 挿入する位置を示す子ノード。 nullであってはならない
name ノードの名前(タグ名)。 nullであってはならない
戻り値 挿入したノード
nodeが子ノードでなかった場合は何もせずに抜けます。

2.12xml@Node.lastChild



「xml@Node.lastChild」は、最後の子ノードを取得するメソッドです。

func lastChild(): xml@Node

戻り値 最後の子ノード。 子が1つも存在しない場合はnullが返る

2.13xml@Node.next



「xml@Node.next」は、次の兄弟ノードを取得するメソッドです。

func next(): xml@Node

戻り値 次の兄弟ノード。 存在しない場合はnullが返る

2.14xml@Node.parent



「xml@Node.parent」は、親ノードを取得するメソッドです。

func parent(): xml@Node

戻り値 親ノード。 ルートノードに対してこのメソッドを呼び出した場合はnullが返る

2.15xml@Node.prev



「xml@Node.prev」は、前の兄弟ノードを取得するメソッドです。

func prev(): xml@Node

戻り値 前の兄弟ノード。 存在しない場合はnullが返る

2.16xml@Node.setAttr



「xml@Node.setAttr」は、属性を設定するメソッドです。

func setAttr(attrName: []char, attrValue: []char)

attrName 属性の名前
attrValue attrNameで指定した属性に設定する値。 nullを指定すると属性を削除する
attrNameで指定した属性が既に存在する場合は、新しい値で上書きします。
attrValueにnullを指定すると、既存の属性を削除しますが、そのときattrNameで指定した属性が存在しなかった場合は、何もせずに抜けます。

2.17xml@Node.setName



「xml@Node.setName」は、ノードの名前(タグ名)を設定するメソッドです。

func setName(name: []char)

name ノードの名前(タグ名)
ノードの名前(タグ名)を、nameで指定した名前で上書きします。

2.18xml@Node.setValue



「xml@Node.setValue」は、ノードの値(タグで囲まれた中身)を設定するメソッドです。

func setValue(value: []char)

value ノードの値(タグで囲まれた中身)。 nullを指定するとタグの中身が空に設定される
タグの中にテキストとタグが入り混じっていた場合は、タグの部分を残してテキストの部分のみが書き換わります。

3xml@Xml

「xml@Xml」は、XMLのツリーのクラスです。

3.1xml@Xml.root



「xml@Xml.root」は、最初のルートノードを取得するメソッドです。

func root(): xml@Node

戻り値 ルート
このルートノードとは、XMLファイル内の一番外側のタグのことではなく、それら一番外側のタグを子ノードとして持つ、さらにもう一段階外側にあるノードです。 XMLでは一番外側に複数のタグが存在できるため、それらを束ねるルートノードを別途用意しています。
ルートノードの最初の子ノードには通常、「<?xml version="1.0" encoding="UTF-8"?>」といったようなプロローグが存在しています。 このため通常操作する子ノードは2つ目以降になります。
ルートノード自体には「ノードの名前(タグ名)」「ノードの値(タグで囲まれた中身)」「属性」などが存在しません。 このような項目を各メソッドを使ってルートノードに対して設定しようとすると、何もせずに抜けます。

3.2xml@Xml.save



「xml@Xml.save」は、XMLファイルに保存するメソッドです。

func save(path: []char, compact: bool): bool

path 保存するXMLファイルのパス
compact 改行やインデントを出力しないならtrue、出力するならfalse
戻り値 保存に成功したらtrue、失敗したらfalse

4xml@makeXml

「xml@makeXml」は、XMLクラスのインスタンスをファイルから作成する関数です。

func makeXml(path: []char): xml@Xml

path XMLファイルのパス
戻り値 XMLクラスのインスタンス。 読み込みに失敗した場合はnullが返る

5xml@makeXmlEmpty

「xml@makeXmlEmpty」は、XMLクラスのインスタンスを新規に作成する関数です。

func makeXmlEmpty(): xml@Xml

戻り値 XMLクラスのインスタンス
作成したXMLのツリーは空になっています。
1544533456jaf