Google Apps脚本XmlService - 按属性搜索

时间:2017-08-10 20:40:51

标签: xml google-apps-script google-sheets xml-parsing

是否有一种简单的方法可以通过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);
    }
  }
}

0 个答案:

没有答案