You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

E4X(Rhapsody)遍历通用子节点:最底层后代处理异常

E4X递归遍历XML的节点丢失问题

场景复现

给定如下XML结构:

<Level1>
    <Level2>
        <Level3>
            <Level4>
                Level 4 Inner Text
            </Level4>
        </Level3>
    </Level2>
</Level1>

使用Rhapsody强制要求的E4X编写递归遍历函数:

function iterateXML(xml) {
    log.info(xml.name());  // 功能类似console.log
    for each (var child in xml.*) {  // .* 用于获取所有子节点
        iterateXML(child);
    }
}

预期输出

Level1
Level2
Level3
Level4
// 异常:传入Level4的文本内容,无.name()方法

实际输出

Level1
Level2
Level3
// 异常:传入Level4的文本内容,无.name()方法

核心问题

当通过xml.*获取子节点时,若目标节点仅包含文本内容、无后代节点,E4X不会返回该XML节点本身,而是直接返回其文本值。这导致最底层节点(比如上述的Level4)无法被遍历到,无论层级是Level2还是Level100,都会出现此问题——例如<lowestNode>SomeValue</lowestNode>,xml.*只会返回SomeValue而非<lowestNode>节点。

补充验证案例

再看另一组XML:

<Root>
    <Child>
        <GrandChild>Value1</GrandChild>
    </Child>
    <Child>
        Value2
    </Child>
</Root>

执行遍历代码:

function iterateXML(xml) {
    for each (var child in xml.*) {  // .* == 获取所有子节点
        log.info(child.toString());
    }
}

输出结果

<Child><GrandChild>Value1</GrandChild></Child>
Value2

可见:包含后代XML节点的<Child>被完整返回;仅含文本的<Child>则仅返回文本内容,处理逻辑明显不一致。


内容的提问来源于stack exchange,提问作者Suamere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:24:37