Google Apps Script中XML对象调用getChild()返回null问题
Google Apps Script XML getChild 返回 null 的解决方法
问题原因
你的XML文档大概率包含默认命名空间(比如根节点<wsKlasgroep>带有xmlns="http://xxx.yyy.zzz"属性),只是你贴出的片段里没显示。Google Apps Script的XmlService.Element.getChild(name)方法仅匹配无命名空间的元素,若目标元素属于某个命名空间,直接传入名称会匹配失败,返回null。
而遍历getChildren()能正常输出是因为该方法会返回所有子元素,且child.getName()默认只显示元素的本地名称(不带命名空间前缀),所以看起来元素名是p_persoon,但实际元素绑定了命名空间,导致直接按名称查找失效。
验证命名空间
可以先打印元素的命名空间确认:
classes.forEach(indiviual_class => { Logger.log(indiviual_class.getNamespace()); // 若输出非null,说明存在命名空间 });
解决方案
方法1:获取元素的命名空间后查找
直接从父元素获取命名空间,再传入getChild方法:
let classes = xmlResult.getChildren(); classes.forEach(indiviual_class => { let ns = indiviual_class.getNamespace(); let persoonElement = indiviual_class.getChild("p_persoon", ns); if (persoonElement) { Logger.log(persoonElement.getText()); // 输出39579 } });
方法2:直接指定已知的命名空间URI
如果提前知道XML的命名空间URI,可直接创建命名空间对象传入:
let targetNs = XmlService.getNamespace("http://your-actual-namespace-uri"); let classes = xmlResult.getChildren(); classes.forEach(indiviual_class => { let persoonElement = indiviual_class.getChild("p_persoon", targetNs); if (persoonElement) { Logger.log(persoonElement.getText()); } });
内容的提问来源于stack exchange,提问作者Mathias Maes
相关产品推荐
相关产品推荐

