我无法将子元素转到<result>
标记。
代码:
var xml = '\
<document>\
<currentTime>2013-09-05 09:47:06</currentTime>\
<result>\
<one>2013-09-05 09:47:06</one>\
<two>2013-09-20 14:30:13</two>\
<three>2013-09-02 14:12:22</three>\
<four>2505</four>\
</result>\
<cachedUntil>2013-09-05 10:28:40</cachedUntil>\
</document>';
var document = XmlService.parse(xml);
var entries = document.getRootElement().getChildren();
Logger.log(entries.length);
for (var i = 0; i < entries.length; i++) {
Logger.log("%s -> %s",entries[i].getName(),entries[i].getText());
}
运行此代码会在记录器中按预期返回以下内容:
[13-09-05 13:54:18:815 EAT] 3.0
[13-09-05 13:54:18:815 EAT] currentTime -> 2013-09-05 09:47:06
[13-09-05 13:54:18:816 EAT] result ->
[13-09-05 13:54:18:816 EAT] cachedUntil -> 2013-09-05 10:28:40
我得到3个元素,我可以正常运行getName()
和getText()
方法。但是,如果我在定义条目后立即尝试使用行<result>
获取var results = entries.getChildren();
等特定元素的子元素,则会收到运行时错误“TypeError:无法在对象中找到函数getChildren [元素: ]”。什么是平分?
我不知道这里发生了什么(显然)。 getRootElement()
返回Element类型。 getChildren()
返回一个Elements数组。 entries
在哪里变成了不是元素的东西,是否有更好的方法来解析这个文档?我觉得我在这里错过了一些非常愚蠢的东西。
答案 0 :(得分:1)
如果有孩子,您只能在元素上调用getChildren()
。这取决于你想要做什么,但这里有一个简单的递归函数,它会拉出我想你想要的东西 -
密钥检查为elements[i].getContentSize() > 1
function startTraversing() {
var xml = '\
<document>\
<currentTime>2013-09-05 09:47:06</currentTime>\
<result>\
<one>2013-09-05 09:47:06</one>\
<two>2013-09-20 14:30:13</two>\
<three>2013-09-02 14:12:22</three>\
<four>2505</four>\
</result>\
<cachedUntil>2013-09-05 10:28:40</cachedUntil>\
</document>';
var document = XmlService.parse(xml);
logChildren(document.getRootElement().getChildren());
}
function logChildren(elements){
Logger.log(elements.length);
for (var i = 0; i < elements.length; i++) {
Logger.log("%s -> %s",elements[i].getName(),elements[i].getText());
if(elements[i].getContentSize() > 1){
var children = elements[i].getChildren();
logChildren(children);
}
}
}
这将输出 -
[13-09-05 09:12:55:781 EDT] 3.0
[13-09-05 09:12:55:781 EDT] currentTime -> 2013-09-05 09:47:06
[13-09-05 09:12:55:782 EDT] result ->
[13-09-05 09:12:55:782 EDT] 4.0
[13-09-05 09:12:55:783 EDT] one -> 2013-09-05 09:47:06
[13-09-05 09:12:55:783 EDT] two -> 2013-09-20 14:30:13
[13-09-05 09:12:55:783 EDT] three -> 2013-09-02 14:12:22
[13-09-05 09:12:55:784 EDT] four -> 2505
[13-09-05 09:12:55:784 EDT] cachedUntil -> 2013-09-05 10:28:40