是否有一种简单的方法可以通过Google Apps脚本中的属性定位XML节点?这是一个XML片段:
<hd:components>
<hd:text name="ADM Custom admissions TE">
<hd:prompt>Admission</hd:prompt>
<hd:columnWidth widthType="minimum" minWidth="100"/>
</hd:text>
<hd:text name="ADM Insufficient heat end date TE">
<hd:prompt>To</hd:prompt>
</hd:text>
<hd:text name="ADM Insufficient heat start date TE">
<hd:prompt>From</hd:prompt>
</hd:text>
<hd:text name="ADM Third party payment period TE">
<hd:defMergeProps unansweredText="__________"/>
<hd:prompt>When (date or period)?</hd:prompt>
</hd:text>
出于我正在尝试解析的XML文件的目的,“name”属性是唯一标识符,而GAS认为是用于XmlService.Element.getChild(name)方法的“名称”(“文本“对于此片段中显示的每个节点”是节点类型的非唯一分类器。我希望能够编写一个函数来从这个XML文件中检索一个只有name属性的特定节点。其他语言的XMLPath表示法使用[@表示法]具有此功能。有没有办法在GAS中执行它,或者我是否需要编写一个遍历XML的函数,直到找到具有正确名称属性的节点,或者将其存储在某种不同类型的数据结构中以便快速搜索XML文件足够大?
这是我开始写的片段:如果没有内置函数就没关系,我只是想知道是否有更好/更快的方法来做到这一点。我的功能效率不高,我想知道XmlService是否有更高效的内部数据结构,用于加速搜索。我的方法是循环遍历所有元素的子元素,直到匹配为止。
function getComponentFromXML(xml,name) {
for (var i = 0; i < xml.length; i++) {
var x = xml[i];
var xname = x.getAttribute('name').getValue();
if (xname == name) {
return getComponentAttributes(x);
}
}
}