Google Apps Scriptの属性でXMLノードを見つける簡単な方法はありますか?ここではXMLの抜粋だ:どのようなガスは考えてはXmlServiceの目的のための「名前」である間、私が解析しようとしているXMLファイルの目的のためにGoogle Apps Script XmlService - 属性別検索
<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>
、「名前」属性は、一意の識別子です。 Element.getChild(name)メソッド(このスニペットに示されている各ノードの "text")は、ノードタイプの一意でない分類子です。私はname属性だけでこのXMLファイルから特定のノードを検索する関数を書くことができるようにしたいと思います。他の言語の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);
}
}
}
[ドキュメント](https://developers.google.com/apps-script/reference/xml)を既に確認しましたか? XmlServiceとその属性に関するGoogle Apps Scriptの-service /) – KENdi
私はそうしましたが、属性に基づいて検索するために既に定義されているメソッドは見ませんでした。それは大きな機能ではありません。特に、Xpathや他のXML実装でさまざまな言語で利用できるように、非標準化されていない非最適化の方法について心配しています。 – Quinten