XML LiveCode備忘録

 supercardになかったもので、LiveCodeが持っている機能としてXMLへの対応があります。
 少しいじってみて、気がついたこと、わかったことを備忘録として記録しておきます。
 そもそもなぜXMLなのかという話、LiveCodeを扱う中で、外部ファイルからのやりとりを考えたとき、カンマ区切り、TAB区切りなどのテキスト書類の他にあるものとしてXML書類が浮上してきた。
 カンマ区切り、TAB区切り共にLiveCodeに取り込んで使うのは難しくはない。どちらの形式にしろ日本語を使う以上はテキストをエンコード、デコードしないでは使えない。これはXML書類でも同じこと。ただ、カンマ区切り、TAB区切りの書類から取り込んだときは必要な数のグローバル変数を用意するか、フィールドなどに一旦退避させるかしなければならなかった。XMLからの取り込みではXMLツリーに取り込むことになるので、メモリー上に展開することが出来る事になるわけで、少し手間が減るのと、スピード上も有利になるのではないかと思われます。
 ただし、XMLツリーはバイナリーレベルのようなので、いちいち変換が必要でこれはこれで面倒。要は使い方次第ということかもしれないが、せっかく用意されている機能なので少し勉強してみたい。ここはその備忘録。LiveCodeの辞書をG・・leで翻訳したものです。

例として使うbookstore.xmlは以下をテキストファイルで.xmlの拡張子をつけて保存しておきます

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>
  1. コマンドと関数
  2. エスケープコード
  3. revXMLTextで保存

1 revXMLAddNode

(command) XMLツリーで指定された親ノードに子ノードを追加します
 revXMLAddNode treeID,parentNode,nodeName,nodeContents,location

treeIDrevXMLCreateTreeによって返される番号 ツリーID
parentNode追加する子の親(のパス)
nodeName子の名前。パスではなく、名前そのもの。enCodeすること。
nodeContents子の持つデータ(テキスト)
location追加する位置。省略するとafter。先頭に入れるならberore
これは必ず “でくくる。”before” のように。そうしないとスクリプトがエラーになります。

revXMLAddNodeコマンドを使用して、XMLツリーにノードを追加します
bookstore.xmlを使って試してみます。
newXMLtextフィールドに次の一行を置きます。

やる気のいらない男の料理

下がボタンに置くスクリプト

on mouseUp pButtonNumber
   get line 1 of field "IDfield"
   put it into tgTree
   
   put revXMLRootNode(tgTree)into tRootNode--ルートノードを得る
   put revXMLFirstChild(tgTree, tRootNode,) into tFChildNode--ここからの5行で第1子を得る
   set the itemDel to slash
   put last item of tFChildNode into tFChildNode -- book[1]
   set the itemDel to "["
   put item 1 of tFChildNode into tFChildNode -- 第1子のノード名を得る。これもエンコードの必要なし
     
   get line 1 of field "newXMLtext"
   put textEncode(it, "utf8")into newXMLtext --エンコードする
   
   put "/"&tRootNode&"/"&tFChildNode&"/" into tBChild2
   
   revXMLAddNode tgTree,tBChild2,"title",newXMLtext,"before"--第1子の最初に"title"ノードを追加し、書名を入れる
   
   put textDecode(revXMLText(tgTree,"/",true),"utf8")into DenData
   put DenData into field "data"
   
end mouseUp

fld “data”に入る結果は

<bookstore>
  <book category="COOKING">
    <title>やる気のいらない男の料理</title>
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
〜後略〜

3行目にノードが追加されています。

2 revXMLAppend

(command)ノードを追加する(XMLテキストを加える)
 revXMLAppend treeID,parentNode,newXML

treeIDrevXMLCreateTreeによって返される番号 ツリーID
parentNode追加する子の親(のパス) newXMLの要素はすべて、parentNodeの子ノードになります。 parentNodeが指定されていない場合、newXMLはXMLツリーの最後に挿入されます。
newXML挿入するXMLテキスト

revXMLAppendコマンドを使用して、既存のXMLツリーに新しいXMLデータを追加します。

bookstore.xmlを使って試してみます。
newXMLtextフィールドに次の一行を置きます。<book category=”COOKING”><title lang=”日本語”>やる気のいらない男の料理</title></book>
ボタンに次のスクリプトを書きます。

on mouseUp pButtonNumber
   get line 1 of field "IDfield"--bookstore.xmlID収納してあるフィールド
   put it into tgTree
   
   put revXMLRootNode(tgTree)into tRootNode--ルートノードを得る
   get line 1 of field "newXMLtext"
   put textEncode(it, "utf8")into newXMLtext
      
   revXMLAppend tgTree, , newXMLtext
   
   put textDecode(revXMLText(tgTree,"/",true),"utf8")into bookData
   put bookData into field "data"
  
end mouseUp

field “data”に出力される結果は以下のようになります。

<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
 〜中略〜
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39,95</price>
  </book>
  <book category="COOKING">
    <title lang="日本語">やる気のいらない男の料理</title>
  </book>
</bookstore>

3 revXMLCopyNode

(command)ノードをコピーする 
revXMLMoveNode treeID,sourceNode,destinationNoce,location,relationship

treeIDツリーID
sourceNodeコピーするノードへのパス
destinationNodeコピー先のノードのパス
locationコピーする位置。省略するとafter。先頭に入れるならberore
これは必ず “でくくる。”before” のように。そうしないとスクリプトがエラーになる。
relationshipsibling or child
兄弟として配置するか、子として配置するか。指定しなければchildで、子として配置される。

revXMLCopyNodeコマンドを使用して、xmlツリーにノードの複製を作成します。

4 revXMLAttribute

(function)属性の値を返す 
revXMLAttribute(treeID, node, attributeName)

treeIDrevXMLCreateTreeによって返される番号 ツリーID
node属性値を取得するノードへのパス。
attributeName属性の名前。

revXMLAttribute関数を使用して、属性の値を取得します。

5 revXMLAttributes

(function)指定されたノードのすべての属性とその値のリストを返す
revXMLAttributes(treeID, node, valueDelim, attributeDelim)

treeIDrevXMLCreateTreeによって返される番号 ツリーID
node属性を一覧表示するノードへのパス。
valueDelimstring属性の値をその名前から分離する文字列。
attributeDelimstring属性の名前と値のペアを相互に分離する文字列。

revXMLAttributes関数を使用して、ノードの属性を表示するか、繰り返しループで各属性をスキャンします。

6 revXMLAttributeValues

(function)XMLツリー内の指定されたノードの指定された属性の値のリストを返す。 
revXMLAttributeValues(treeID, startNode, childName, attributeName, delimiter, depth)

treeIDrevXMLCreateTreeによって返される番号 ツリーID
startNode開始するノードへのパス。
childNamestringスキャンする子ノードを指定する文字列。空の場合、すべての子ノードがスキャンされます。それ以外の場合は、名前がchildNameと一致する子ノードのみがスキャンされます。
attributeNameスキャンする属性の名前。
delimiterstring各値を残りの値から分離する文字列。
depth深さは、スキャンするXMLツリーの世代数を指定します。ゼロを指定すると、startNodeのみがスキャンされます。 1を指定すると、startNodeとその子ノードはスキャンされますが、子ノードはスキャンされません。等々。すべての世代をスキャンするには、深さとして-1を指定します。

revXMLAttributeValues関数を使用して、属性がXMLツリーまたはXMLツリーのセクションに持つすべての値を一覧表示するか、可能な値の範囲を取得します。

7 revXMLChildNames

(function)XMLツリーの指定されたノードの下にある子ノードのリストを返す 
revXMLChildNames(treeID, startNode, nameDelim, childName, includeChildCount, [incText])

treeIDrevXMLCreateTreeによって返される番号 ツリーID
startNode子ノードをリストするノードへのパス。
nameDelim各子ノードの名前を他のノードから分離する文字列。
childNameリストする子ノードを指定する文字列。空の場合、すべての子ノードが一覧表示されます。それ以外の場合は、名前がchildNameと一致する子ノードのみがリストされます。
includeChildCountbooltrueまたはfalseのいずれか。 includeChildCountがtrueの場合、各ノードの名前の後に、括弧で囲まれた子の数が続きます。

revXMLChildNames関数を使用して、親ノードの下にある子ノードを確認できます。

エラーが発生した場合、「xmlerr」で始まるエラーメッセージが返されます。

incTextフォームが指定され、trueの場合、関数は処理中にテキストノードを返します。テキストノードには、拡張パス形式のrevXMLNodeContents関数を使用してアクセスできます。この場合、テキストのみのノードに数値のインデックスが付けられます。たとえば、summary / command / [1]はsummary / commandノードの最初のテキストノードです。

8 revXMLChildContents

(function)指定されたノードのタグとテキストコンテンツのリストを返します。
revXMLChildContents(treeID, startNode, tagDelim, nodeDelim, includePathDetails, depth)

treeIDrevXMLCreateTreeによって返される番号 ツリーID
startNode開始するノードへのパス
tagDelimstring子ノードの各タグ名を残りのタグ名から分離する文字列。
nodeDelimstring各子ノードを残りのノードから分離する文字列
includePathDetailsincludePathDetailsは、次の値を取ることができます。
「false」:各ノードの名前だけが返されます(デフォルト) 「true」:各ノードが名前の後に括弧で囲まれている子番号を含みます
「full」:必要に応じて、括弧内の子番号を含む各ノードのフルパスが返されます
“relative”:startNodeに相対的なパスは、必要に応じて角かっこで囲まれた子番号に含まれます
depth深さは、表示するXMLツリーの世代数を指定します。ゼロを指定すると、startNodeのみが表示されます。 1を指定すると、startNodeとその子ノードは表示されますが、子ノードは表示されません。等々。すべての世代を表示するには、深さとして-1を指定します。

revXMLChildContents関数を使用して、XMLツリーのセクションに関する情報を取得します。

revXMLChildContents関数は、ノードのテキストコンテンツを返します。これは、子ノードに含まれていない最初のテキストとして定義されます。例えば:<root><child>Text<subchild>Child Text</subchild>Text 2</child></root>

前のXMLドキュメントでは、revXMLChildContentsは、startNodeとして「root」、深さとして1を指定して呼び出されると、文字列「Text」を返します。

9 revXMLCreateTree

(function)XMLツリーを作る 
revXMLCreateTree(XMLText, dontParseBadData, createTree, sendMessages)

XMLTextstring               
dontparseBadDatabool
createTreebool
sendMessagesbool

XMLXMLテキストデータからXMLツリー構造を作成します。

revXMLCreateTree関数は、他のXMLライブラリコマンドおよび関数でツリーを参照するために使用できるツリーIDを返します。ツリーIDは常に正の整数です。 (createTreeがfalseの場合、関数はゼロを返します。)

一つのカードにボタン一つとフィールド2つを用意します
ボタンに書き込むスクリプトです。
読み込むbookstore.xmlでは、bookstoreを本屋に、Everyday Italianを毎日イタリアンに
書き換えてあります。

  
  
   --XMLファイルを読み込みます
   answer file "取り込むXMLファイルはどこですか"   
   
   --ファイルを変数に読み込み
   put it into tFile 
   put url("file:"&tFile) into tUrl
   
   --put textDecode(tUrl,"utf8") into tFile--デコードする
   put tUrl into tFile--デコードしない
   
   put revCreateXMLTree(tFile,false,true,false) into tgTree
   put tgTree & return into field "data" --フィールドにIDを表示
   
   --デコードしないと内容をフィールドに入れた時に文字化けするので
   --フィールドに入れる時にデコードする
  
   put textDecode(tFile,"utf8") into field "data2"
   
   
end mouseUp

ボタンを実行した所です。一つ目のフィールドにはID番号が入っています。

10 revXMLCreateTreeFromFile

(function) ファイルURLからXMLツリーを作る
revXMLCreateTreeFromFile(filePath, parseBadData, createTree, sendMessages)

filePathXMLテキストを含むファイルの名前と場所
parseBadDatabool
createTreebool
sendMessagesbool

revXMLCreateTreeFromFile関数は、他のXMLライブラリコマンドおよび関数でツリーを参照するために使用できるツリーIDを返します。ツリーIDは常に正の整数です。

11 revXMLCreateTreeFromFileWithNamespaces

(function)XMLファイルを読み取り、オプションでXMLツリーを作成します
revXMLCreateTreeFromFileWithNamespaces(filePath, parseBadData, createTree, sendMessages)

filePathstringXMLテキストを含むファイルの名前と場所         
dontparseBadDatabool
createTreebool
sendMessagesbool

XMLファイルを読み取り、オプションでXMLツリーを作成し、ツリーの一部としてXML名前空間タグと属性を返します

revXMLCreateTreeFromFileWithNamespaces関数は、他のXMLライブラリコマンドおよび関数でツリーを参照するために使用できるツリーIDを返します。ツリーIDは常に正の整数です。 (createTreeがfalseの場合、関数はゼロを返します。

12 revXMLDataFromXPathQuery

XMLツリーを評価する
revXMLDataFromXPathQuery(pDocID, pXPathExpression [, charDelimiter [, lineDelimiter ] ] )

pDocIDは、revXMLCreate関数の1つから返されるxmlドキュメントIDです。 charDelimiterとlineDelimiterはどちらもデフォルトでcrになっています。どちらも指定されていない場合、アイテムは1行に1つずつ返されます。

例:J. K. Rowling Harry Potter Cory Doctorow Little Brother

revXMLDataFromXPathQuery関数は、指定されたxmlツリーに対してxpath式を評価した結果のデータセットを返します。例えば以下のようなXML書類で

<?xml version="1.0" encoding="ISO-8859-1"?>
     <bookstore>
         <book category="COOKING">
             <title lang="en">Everyday Italian</title>
             <author>Giada De Laurentiis</author>
             <year>2005</year>
             <price>30.00</price>
         </book>
         <book category="CHILDREN">
             <title lang="en">Harry Potter</title>
             <author>J K. Rowling</author>
             <year>2005</year>
             <price>29.99</price>
         </book>
         <book category="WEB">
             <title lang="en">XQuery Kick Start</title>
             <author>James McGovern</author>
             <author>Per Bothner</author>
             <author>Kurt Cagle</author>
             <author>James Linn</author>
             <author>Vaidyanathan Nagarajan</author>
             <year>2003</year>
             <price>49.99</price>
         </book>
         <book category="WEB">
             <title lang="en">Learning XML</title>
             <author>Erik T. Ray</author>
             <year>2003</year>
             <price>39,95</price>
         </book>
     </bookstore>
 </xml>

次のようなスクリプトを実行すると

put “/bookstore/book[price<40]/title” into pXPathExpression
put revXMLDataFromXPathQuery(pDocID, pXPathExpression) into tBooks
ここでpDocIDはXMLのID。ノードを「title」に指定しているので、返値(tBooks)は下のリストになります。

Everyday Italian
Harry Potter
Learning XML


一行にまとめると
put revXMLDataFromXPathQuery(2, “/bookstore/book[price<40]/title”) into tBooks

13 revXMLDeleteAllTrees

(command)
XMLライブラリの使用が終了したら、revXMLDeleteAllTreesコマンドを使用してメモリを解放します

14 revXMLDeleteNode

(command)XMLツリーからノードを削除する
revXMLDeleteNode treeID, nodeToDelete

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
nodeToDelete削除するノードへのパス。

revXMLDeleteNodeコマンドを使用して、作業中のXMLツリーの一部を削除します

15 revXMLDeleteTree

(command)XMLツリー構造をメモリから削除します
revXMLDeleteTree treeID

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号

XMLツリーの使用が終了したら、revXMLDeleteTreeコマンドを使用してメモリを解放します。

16 revXMLEndTree

(message)
revXMLCreateTreeFromFile関数がXMLドキュメントの解析を終了すると、現在のカードに送信されます。

on revXMLEndTree

  save this stack — save stack with XML data to disk

end revXMLEndTree

XMLドキュメントの独自のサブセットを作成する場合は、revEndXMLTreeメッセージを処理します。

revXMLCreateTreeまたはrevXMLCreateTreeFromFile関数は、XMLデータを取得して解析します。これらの関数のいずれかを呼び出すときに、解析操作中にメッセージを送信するかどうかを指定できます。

関数にメッセージを送信させるように指定した場合、関数がファイル内の最後のタグを検出すると、revXMLEndTreeメッセージが送信されます。メッセージを送信しないように指定した場合、revXMLEndTreeメッセージは送信されません。

17 revXMLEvaluateXPath

(function) xpath式を評価した結果を返す。
revXMLEvaluateXPath(pDocID, pXPathExpression [, charDelimiter ] )

pDocIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
pXPathExpression
charDelimitercharDelimiterのデフォルトはcrです。指定しない場合、アイテムは1行に1つずつ返されます

revXMLEvaluateXPath関数は、指定されたxmlツリーに対してxpath式を評価した結果のデータセットを返します。

revXMLDataFromXPathQueryに似た関数です。同じXML書類で、

put “/bookstore/book[price<40]/title” into pXPathExpression

put revXMLEvaluateXPath(pDocID, pXPathExpression)

属性「price」が40ドル以下であることが条件。これを実行した時得られるのは

bookstore/book[1]

bookstore/book[2]

bookstore/book[4]

となり、ノードの番号で返ってきます。

18 revXMLFirstChild

(function) ノードの最初の子ノードへのパスを返します
revXMLFirstChild(treeID, parentNode, [ incText ])

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
parentNode子ノードを検索するノードへのパス

revXMLFirstChild関数を使用して、親ノードの子ノードのスキャンをします。

revXMLFirstChild(1,”/State/City”)

put revXMLFirstChild(thisTree,thisNode) into thisNode

注:incTextフォームが指定され、trueの場合、関数は処理中にテキストノードを返します。テキストノードには、拡張パス形式のrevXMLNodeContents関数を使用してアクセスできます。この場合、テキストのみのノードに数値のインデックスが付けられます。たとえば、summary / command / [1]はsummary / commandノードの最初のテキストノードです。

重要:incTextフォームは実験的なものです

19 revXMLInsertNode

(command)ノードをXMLツリーに挿入します。
revXMLInsertNode treeId, siblingNode, nodeName, contents, [location]

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
siblingNode追加する兄弟(のパス)
nodeName追加するノードの名前。パスではなく、名前。enCodeする。
nodeContents追加するノードの持つデータ(テキスト)
location追加する位置。省略するとafter。先頭に入れるならberore
これは必ず “でくくる。”before” のように。そうしないとスクリプトがエラーになる。

指定されたツリーにsiblingNodeの兄弟としてノードを挿入します

revXMLInsertNode tTreeId, “sister”, field “Name”, field “Contents”, “before”

20 revXMLMatchingNode

(function)属性でノードを検索します。
revXMLMatchingNode(treeID, startNode, childName, attributeName, attributeValue, depth [, caseSensitive])

depth

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
startNode開始するノードへのパス
childNamestringスキャンする子ノードを指定する文字列。空の場合、すべての子ノードがスキャンされます。それ以外の場合は、名前がchildNameと一致する子ノードのみがスキャンされます。
attributeName調べたい属性の名前
attributeValueattributeNameを見つける必要がある値。
depth深さは、スキャンする世代の数を指定します。 1を指定すると、parentNodeの子ノードはスキャンされますが、子ノードはスキャンされません。すべての世代をスキャンするには、深さとして-1を指定します
caseSensitiveTrueまたはFalseで、attributeValueを大文字と小文字を区別して比較するかどうかを決定します。 caseSensitiveが指定されていない場合、属性値を比較するときに大文字と小文字は無視されます(つまり、デフォルトはfalseです)。

ノードの指定された属性が指定された値を持つXMLツリー内のノードを検索します。

revXMLMatchingNode関数は、指定された値を持つ指定された属性を含む最初のノードへのパスで構成される文字列を返します。

revXMLMatchingNode(1,revXMLRootNode(1),,”PubYear”,”2001″,-1)

put revXMLMatchingNode(thisTree,it,field “Category”,thisAttr,”Yes”,4) after tFoundNodePaths

検索により見つかったものは /仕分/摘要[186]/備考[5] のように、ノードと番号で返される。
見つからなかつた時の返値はempty。

21 revXMLMoveNode

(command)ノードを移動する 
revXMLMoveNode treeID,sourceNode,destinationNoce,location,relationship

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号
sourceNode移動するノードへのパス
destinationNode移動先のノードのパス
location移動する位置。省略するとafter。先頭に入れるならberore
これは必ず “でくくる。”before” のように。そうしないとスクリプトがエラーになる。
relationshipsibling or child
兄弟として配置するか、子として配置するか。指定しなければchildで、子として配置される。デフォルトはchild。これは必ず “でくくる。

revXMLMoveNode tTreeId, “root/MyNode”, “root/MyNode2”, “after”, “sibling”

revXMLMoveNode tTreeId, tTargetNode, tDestinationNode, “before”, “child”

22 revXMLNextSibling

(function) 子ノードの次の兄弟ノードへのパスを返します
revXMLNextSibling(treeID, node)

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号 ツリーID               
siblingNode開始するノードへのパス。

revXMLNextSibling関数は、siblingNodeと同じ親を持つ次のノードへのパスで構成される文字列を返します。次の兄弟ノードがない場合、revXMLNextSibling関数は空(empty)を返します。

revXMLNextSibling(3,”/City/Publisher”)

put revXMLNextSibling(the currTree of me,thisNode) into nextNode

23 revXMLNodeContents

(function) XMLツリーの指定されたノードに含まれるテキストを返します。
revXMLNodeContents(treeID, node)

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID     
nodeコンテンツを取得するノードへのパス。

revXMLNodeContents関数を使用して、ノードのテキストコンテンツを取得します。

revXMLNodeContents関数は、ノードのテキストコンテンツを返します。これは、子ノードに含まれていない最初のテキストとして定義されます。

<root>Text<child>Child Text</child>Text 2</root>

前のXMLドキュメントでは、revXMLNodeContentsは、ノードとして「root」を指定して呼び出されると、文字列「Text」を返します。

24 revXMLNumberOfChildren

(function)XMLツリー内の指定されたノードの下にある子ノードの数を返します。
revXMLNumberOfChildren(treeID, startNode, childName [, depth])

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
startNode子ノードをカウントするノードへのパス。
childNamestringカウントする子ノードを指定する文字列。空の場合、すべての子ノードがカウントされます。それ以外の場合は、名前がchildNameと一致する子ノードのみがカウントされます。
depth深さは、カウントする世代数を指定します。 0を指定すると、parentNodeの直接の子ノードのみがカウントされ、子ノードはカウントされません。 1を指定すると、parentNodeの子ノードが子ノードとともにカウントされます。すべての世代をカウントするには、深さとして-1を指定します。

revXMLNumberOfChildren関数は、負でない整数を返します。

revXMLNumberOfChildren(3,myNode,,-1)

repeat for revXMLNumberOfChildren(theTree,theNode,”Book”,1) times

revXMLNumberOfChildren関数を使用して、親ノードにある子ノードの数、または特定の種類の子ノードにある子ノードの数を確認します。

25 revXMLParent

(function) XMLツリー内のノードの親ノードへのパスを返します
revXMLParent(treeID, childNode)

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID     
node開始するノードへのパス。

revXMLParent関数は、childNodeの親ノードへのパスで構成される文字列を返します。 childNodeがXMLツリーのルートノードである(したがって親がない)場合、revXMLParent関数は空を返します。

revXMLParent(1,”/City/Publisher”)

put revXMLParent(thisTree,thisNode) into field “Parent”

revXMLParent関数を使用して、XMLツリーの1つ上のレベルに移動します。

26 revXMLPreviousSibling

(function) 子ノードの前の兄弟ノードへのパスを返します。
revXMLPreviousSibling(treeID, siblingNode, [incText])

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID     
node開始するノードへのパス。

revXML PreviousSibling関数を使用して、現在のレベルのノードのリストをバックアップします

revXMLPreviousSibling関数は、siblingNodeと同じ親を持つ前のノードへのパスで構成される文字列を返します。以前の兄弟ノードがない場合、revXMLPreviousSibling関数は空を返します。

27 revXMLPutIntoNode

(command) XMLツリーのノードの内容を設定します
revXMLPutIntoNode treeID, nodePath, newContents [, replaceTextOnly]

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
nodePath内容を設定するノードへのパス
newContentsノードに含まれるテキスト
replaceTextOnlyreplaceTextOnlyは、子ノードを保持するかどうかを指定します。 replaceTextOnlyがtrueの場合、指定されたノードのすべてのテキストがnewContentsに置き換えられますが、すべての子ノードは保持されます。それ以外の場合は、すべての子ノードが削除されます。 replaceTextOnlyパラメーターはオプションであり、指定されていない場合、デフォルトでfalseになります。

revXMLPutIntoNodeコマンドを使用して、ノードの開始タグと終了タグの間のノードにデータを配置します。

revXMLPutIntoNodeコマンドでエラーが発生した場合、結果は「xmlerr」で始まるエラーメッセージに設定されます。

ヒント:Unicodeテキストをノードに配置するには、最初にuniDecode関数を使用してテキストをUTF-8としてエンコードします。

28 revXMLRootNode

(function) XMLツリーの開始ノードへのパスを返します
revXMLRootNode(treeID)

revXMLRootNode関数を使用して、XMLツリーのルートノードへのパスを取得します。

ルートノードは、XMLツリーの開始ノードです。対応するXML要素は、XMLドキュメント内の他のすべての要素を含む要素です。

29 revXMLSetAttribute

(command) ノードの属性を作成するか、既存の属性の値を設定します。
revXMLSetAttribute treeID, node, attributeName, newValue

treeIDstringXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
nodebool属性が設定されるノードへのパス
attributeNamebool
newValuebool

revXMLSetAttributeコマンドを使用して、属性を作成および変更します。

attributeNameがまだノードの属性でない場合は、指定された名前と値を持つ新しい属性が作成されます。

属性がすでに存在する場合、その値はnewValueに設定されます。

revXMLSetAttribute 6,”/Vegetable/Tree/Cedar”,”height”,”tall”

revXMLSetAttribute thisTree,currNode,myString,field “Data”

30 revXMLStartTree

(message)
XMLドキュメントの独自のサブセットを作成する場合は、revXMLStartTreeメッセージを処理します。

revXMLCreateTreeFromFile関数がXMLドキュメントの解析を開始すると、現在のカードに送信されます。

revXMLCreateTreeまたはrevXMLCreateTreeFromFile関数は、XMLデータを取得して解析します。これらの関数のいずれかを呼び出すときに、解析操作中にメッセージを送信するかどうかを指定できます。

関数にメッセージを送信させるように指定した場合、関数がXMLの解析を開始すると、revXMLStartTreeメッセージが送信されます。メッセージを送信しないように指定した場合、revXMLStartTreeメッセージは送信されません。

on revXMLStartTree — prepare a stack to hold a data subset

  ask “Get XML data for which publisher?”

  if it is empty then exit to top — stop parsing

  set the currPublisher of this stack to myPublisher — store value

  clone stack “Subtree” of this stack — new stack to hold data subset

end revXMLStartTree

31 revXMLText

(function) XMLツリーの内容をXMLテキストとして返します。
revXMLText(treeID [, startNode] [, formatted])

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
startNode開始するノードへのパス。 startNodeを指定しない場合、revXMLText関数はルートノードから開始し、XMLツリー全体を返します。
formattedインデントと改行を含むxmlを生成するかどうか、つまり「きれいに印刷された」かどうか。フォーマットされた値を指定しない場合、デフォルトではテキストがフォーマットされません。これにより、xmlが改行のない単一のブロックとして出力されます。

revXMLText関数を使用して、XMLツリーをXMLドキュメントに戻します。XMLツリーはメモリー上に展開されていますから、ハードディスクなどに保存しようとした時にはテキスト書類に戻す必要があります。そのような時にこの関数を使います。

revXMLText(12)

revXMLText(the xmlID of this card,”/Plants/Trees”)

put revXMLText(tTreeId, ,true) into URL “file:New Customers.xml”

上はLiveCodeの辞書に乗っている例文ですが、以下のようにURLから後ろをカッコでくくらないとちゃんと動きません。

put “New Customers.xml” into tFile
put revXMLText(tTreeID,,true) into URL (“file:”&tFile)

32 revXMLTree

(function) 親子関係を示す形式で、XMLツリー内のノードのリストを返します。
revXMLTree(treeID, startNode, nodeDelim, padding, includeChildCount, depth)

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
startNode開始するノードへのパス
nodeDelimstring各ノードの名前を他のノードから分離する文字列。
paddingstringツリー内の深さを示すために、各ノードの名前の前に配置される文字列。 startNodeの名前の前にパディングは配置されません。
includeChildCountboolincludeChildCountがtrueの場合、各ノードの名前の後にノードの位置述語、つまりノードがどの子番号​​であるかが続きます。
depth深さは、表示するXMLツリーの世代数を指定します。ゼロを指定すると、startNodeのみが表示されます。 1を指定すると、startNodeとその子ノードは表示されますが、子ノードは表示されません。等々。すべての世代を表示するには、深さとして-1を指定します

revXMLTree(3,”/Sound”,return,space,false,1)

revXMLTree(currTree,foundNode,space,,true,2)

put revXMLTree(myTree,theNode,return,tab,false,-1) into field “Node List”

通常、returnをnodeDelimiterとして使用し、tabをパディングとして使用します。結果のノードのリストは、ノードの深さと同じ数の先頭のタブとともに、行ごとに1つのノードで表示されます。

revXMLTree関数を使用して、XMLツリーのノードのテキスト「ツリースタイル」ビューを取得します。

XMLツリー全体を表示するには、revXMLRootNode関数によって返されるルートノードをstartNodeとして指定します。

33 revXMLTrees

(function) メモリ内のすべてのXMLツリーのリストを返します。
revXMLTrees()

revXMLTrees関数は、ツリーIDのリストを1行に1つずつ返します。

34 revXMLValidateDTD

(function) XMLツリーの構文がDTDに準拠しているかどうかを確認します。
revXMLValidateDTD(treeID, DTDText)

treeIDXMLツリーを作成したときにrevXMLCreateTreeまたはrevXMLCreateTreeFromFile関数によって返される番号  ツリーID
DTDTextドキュメントタイプ定義

XMLツリーがDTDに対して検証する場合、revXMLValidateDTD関数は空を返します。

コメント

タイトルとURLをコピーしました