用javascript解析XML

用javascript解析XML,javascript,Javascript,我有以下XML <plist version="1.0"> <dict> <key>items</key> <array> <dict> <key>assets</key> <array> <dict>

我有以下XML

<plist version="1.0">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>test1</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>test</string>
                    <key>bundle-version</key>
                    <string>1.0</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>pixTraining</string>
                    <key>title</key>
                    <string>test</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>
我得到了版本。但是当我在JavaScript中有相同的代码时,我不会得到任何东西。这是我的JavaScript代码

var elements = doc.evaluate('//plist/dict/array/dict/dict/string[2]');
我什么也没拿回来<代码>元素以
未定义
的形式出现。有什么线索吗?

这里有一个如何实现这一点的教程

也许你可以检查一下

var elements = doc.evaluate('//plist/');

不为空,然后继续

@Kooilnc的做法是正确的,但Firefox似乎对您指定的
XPathResult
类型很挑剔。我希望XPathResult.ANY_类型都能工作,但它不能。在我的测试中,只有
无序节点快照类型
有序节点快照类型
有效

例如:

var result = doc.evaluate("/plist/dict/array/dict/dict/string[2]", 
                doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
result.snapshotItem(0); // access the element
请注意,
evaluate
返回一组匹配的节点。使用
snapshotItem
访问集合中的第一个项目。如果表达式返回多个节点,则可以按如下方式对其进行迭代:

for (var i = 0; i < result.snapshotLength; i++) {
    console.log(result.snapshotItem(i));
}
for(var i=0;i
进一步阅读:


感谢您的回复,似乎我无法在Tianium上使用的javascript中使用3级DOM API。我得到一个未找到的XPathResult。我将不得不用老方法来做,那就是迭代和检查节点。
for (var i = 0; i < result.snapshotLength; i++) {
    console.log(result.snapshotItem(i));
}