2

ECMA Script(datapower)でxpath式を使用してXMLデータにアクセスする方法を知っている人はいますか?

IBM インフォセンターには、XML データへのアクセス方法に関するこの情報はありません

XML データにアクセスするためのサンプル スクリプトがあれば提供してください

ありがとう

4

2 に答える 2

4

GatewayScript は、実装されている ECMA (Node.js) で XML Dom をサポートしていません。しかし、私はモジュール XPATH と DOM を使用して大きな成功を収めました。XMLDom ( https://github.com/jindw/xmldom ) および Xpath ( https://github.com/goto100/xpath ) Node.js モジュールをダウンロードし、次のスクリプトを DP ディレクトリに追加します。

  • ドムパーサー.js
  • ドム.js
  • sax.js
  • xpath.js

これを DataPower GWS で使用するには、まず INPUT から XML データを取得する必要があります。

// This is where we start, grab the INPUT as a buffer
session.input.readAsBuffers(function(readAsBuffersError, data) {


    if (readAsBuffersError) {
        console.error('Error on readAsBuffers: ' + readAsBuffersError);
        session.reject('Error on readAsBuffers: ' + readAsBuffersError);
    } else {

        if (data.slice(0,5).toString() === '<?xml') {

            console.log('It is XML!');
            parseXML(data);

        }
    } //end read as buffers error
}); //end read as buffer function

function parseXML(xml) {
    // Load XML Dom and XPath modules
    var select = require('local:///xpath.js');
    var dom = require('local:///dom-parser.js');

    var doc = new dom.DOMParser().parseFromString(xml.toString(), 'text/xml');
    // Get attribute
    var nodes = select(doc, "//root/element1/@protocol");
    try {
        var val = nodes[0].value.toString();
        console.log('found xml attribute as ['+val+']');
    } catch(e) {
        // throw error here
    }

    // Get an element
    nodes = select(doc, "//root/element1/child1");
    try {
        var val = nodes[0].firstChild.data;
        console.log('elemnt found as ['+val+']');
    } catch(e) {
        //throw error here
    }

}

それは実用的なサンプルになるはずです...モジュールを移動する場合は、モジュールのパスを変更する必要があります。store:/// に GWS モジュールを追加するディレクトリがあります。

あなたがそれを飛ばすことを願っています!

于 2014-12-05T13:33:27.787 に答える