2011-04-20 152 views
1

我有下面的XML解析XML的JavaScript

<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編輯

/plist/dict/array/dict/dict/string[2] 

使用XPath的,我回去的版本。但是當我在JavaScript中使用相同的代碼時,我沒有收到任何迴應。這裏是我的JavaScript代碼

var elements = doc.evaluate('//plist/dict/array/dict/dict/string[2]'); 

我什麼都沒有收回。 elements即將到來undefined。任何線索爲什麼?

回答

1

@Kooilnc位於正確的軌道上,但似乎Firefox對您指定的XPathResult類型很挑剔。我期望XPathResult.ANY_TYPE工作,但它不。在我的測試中,只有UNORDERED_NODE_SNAPSHOT_TYPEORDERED_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)); 
} 

延伸閱讀:

+0

感謝您的答覆,好像我不能在Titanium上使用的JavaScript中使用Level 3 DOM API。我找不到一個XPathResult。我將不得不按照舊的方式迭代並檢查節點。 – allthenutsandbolts 2011-04-21 03:36:08