XMLファイルの要素取得
皆さんこんにちはアドバンス情報システムの川島です。
この度、新規のシステムにてxmlファイルを読み込んで内容を取得する、と機能を作成するのですが下記のような要素の取得方法はどうやって取得すれば良いのか分かりません。
<record-list>
<record id="15">
<create-time>2015-09-14T20:06:54</create-time>
<value type="Select" id="1689">AAAA</value>
<value type="String" id="1569">BBBB</value>
<value type="String" id="18">CCCC</value>
上記のようなXMLで AAAAは
・XMLGet(0,1,'/dezie/library/record-list/record/value')
で取得できましたが BBBBとCCCCが取得出来ない状態です。(必ずAAAAが取得される)
BBBBとCCCCを取得するにはどのようにすれば取得できますでしょうか?ご支援のほどお願いいたします。(今回XMLを初めて取得するので勝手が分からない状態です。)
皆さんよろしくお願いいたします。
-
AIS川島さん、
試したわけではないのですが、複数の要素を取得するにはデータの内容を配列で取得する必要があるかと思います。
関数一覧で調べてみましたら、XMLBlobGet() 関数がそれに該当するように思えますが、いかがでしょうか?ヘルプにはサンプルも載っているようです。
XML要素やXML属性の数を取得するには、XMLCnt() 関数が用意されているようです。
-
AIS川島さん、
追伸です。
ヘルプを見ますと、XMLGet() 関数でもインデックスが指定できるとありますので、XMLBlobGet() 関数を使わなくても、複数の値が取得できそうですね。事前に、XMLCnt() 関数を使ってインデックスの最大値を取得しておけばいいと思います。
-
アドバンス情報の川島です。
ご回答ありがとうございました。早速試したいと思います。
ベクトル型の変数に更新するわけですね。
-
AIS川島さん、
ベクトル化してもいいのですが、追伸にも書きましたように、XMLGet() でもインデックスを指定することができることが分かりましたので、XMLCnt() で取得したインデックスの数だけループさせればいいと思います。
XMLGet() のヘルプにサンプルプログラムが掲載されていますよ。
-
川島さん、こんにちは。
XMLGet(0,1,'/dezie/library/record-list/record/value')
で取得できるのなら、
XMLGet(0,1,'/dezie/library/record-list/record/value[2]')
XMLGet(0,1,'/dezie/library/record-list/record/value[3]')
...
XMLGet(0,1,'/dezie/library/record-list/record/value[n]')
で取得できると思います。 -
アドバンス情報の川島です。
ご返信ありがとうございます。
できました、ご指定のように要素インデックスの指定をしていませんでした。
取得した内容を変数に入れてDBに更新しました。
ご教授のほどありがとうございました。
今後ともよろしくお願いいたします。
-
川島さん、
うまく動いてよかったですね。
インデックスを指定しない場合は、最初の1個だけが取り込まれます。
サインインしてコメントを残してください。
コメント
7件のコメント