有人知道如何在 ECMA 脚本(datapower)中使用 xpath 表达式访问 XML 数据吗?
IBM 信息中心没有关于如何访问 XML 数据的信息
请提供您是否有任何用于访问 XML 数据的示例脚本
谢谢
有人知道如何在 ECMA 脚本(datapower)中使用 xpath 表达式访问 XML 数据吗?
IBM 信息中心没有关于如何访问 XML 数据的信息
请提供您是否有任何用于访问 XML 数据的示例脚本
谢谢
GatewayScript 不支持实施的 ECMA (Node.js) 中的任何 XML Dom。然而,我使用模块 XPATH 和 DOM 取得了巨大成功。下载 XMLDom ( https://github.com/jindw/xmldom ) 和 Xpath ( https://github.com/goto100/xpath ) Node.js 模块并将以下脚本添加到您的 DP 目录:
要在 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 模块。
希望你能飞起来!
至少从 7.0.0 固件版本开始,Gatewayscript 能够轻松地使用 XPATH 和 DOM。来自 DP 商店的片段:
//reading body from the rule input
session.input.readAsXML(function (error, nodeList) {
if (error) {
//error behaviour
} else {
var domTree;
try {
domTree = XML.parse(nodeList);
} catch (error) {
//error behaviour
}
var transform = require('transform'); //native gatewayscript module
transform.xpath('/someNode/anotherNode/text()', domTree, function(error, result){
if(error){
//error behaviour
}
//some use of result, for example putting it to output
session.output.write(result);
}
});
});