我有以下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>如果我在xml编辑器中使用这个XPath
/plist/dict/array/dict/dict/string[2]我拿回了版本。但是当我在JavaScript中有相同的代码时,我得不到任何东西。下面是我的JavaScript代码
var elements = doc.evaluate('//plist/dict/array/dict/dict/string[2]');我没有拿回任何东西。elements将以undefined的身份出现。有线索知道为什么吗?
发布于 2011-04-21 01:08:26
https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript
这里有关于如何实现这一点的教程。
也许你可以检查一下
var elements = doc.evaluate('//plist/');不是空的,然后再往前走。
发布于 2011-04-21 02:18:53
@Kooilnc是正确的,但是火狐似乎对你指定的XPathResult类型很挑剔。我希望XPathResult.ANY_TYPE能工作,但它不能。在我的测试中,只有UNORDERED_NODE_SNAPSHOT_TYPE和ORDERED_NODE_SNAPSHOT_TYPE可以工作。
例如:
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));
}进一步阅读:
https://stackoverflow.com/questions/5733927
复制相似问题