簡體   English   中英

訪問JavaScript XPath查詢中的節點集

[英]Accessing a node-set in a JavaScript XPath query

我有一個簡單的問題,我似乎無法找到答案。

我想壓縮兩個XPath語句(獲取屬性值)。 我了解了| 運算符,聽聽它如何返回節點集。

var getdata = xmldoc.evaluate
(
    '/foo/bar[@world=\''+hello+'\']/child::*/attribute::name
    |/foo/bar[@world=\''hello+'\']/child::*/attribute::id', 
    xmldoc, null, XPathResult.ANY_TYPE, null
);

對於任何想知道的人,不,我不會以這種方式格式化我的評估字符串...盡管如此,我現在有點像我輸入它了。 無論如何,這就是我測試它的方式。

alert(getItemData.iterateNext().childNodes[0].nodeValue);

這樣可行! 但它只返回第一個。 在寫這篇文章時,我只是嘗試了.length並突破了...它只計算一個項目。 我是否被欺騙了|的概念 我如何獲得一套然后通過它們?

XML文檔,根據要求。

<?xml version="1.0" encoding="ISO-8859-1"?>
<foo>
    <bar world="hello" id="1">
        <subbar name="item1" id="2">
        </subbar>
    </bar>
    <bar world="bye" id="3">
        <subbar name="item2" id="4">
        </subbar>
    </bar>
</foo>

編輯:我目前正在使用一個抓取元素而不是屬性的函數,但我真的想知道另一種方式。 除非我正在做的是最好的方式。

如果JQuery是一個選項,那么查看他們的XML遍歷庫可能是值得的。 快速搜索在這里拉了一篇文章。 我寫了一個非常粗略的例子,說明導入xml文檔后邏輯的樣子,鏈接中對此進行了解釋。

var hello = "foo";
$('bar[world=' + hello + '] > subbar').each(function () {
    // You'd want to save these values somewhere else, obviously.
    $(this).getAttribute(name);
    $(this).getAttribute(id);
});

這里的關鍵是你使用的XPathResult類型。

我已經實現了同樣的工作樣本。 請參閱http://jsbin.com/eneso3/5/edit上的代碼

基本上你必須使用Iterator作為結果類型sot hat我們可以迭代它們來獲取文本。 請參閱工作代碼示例頁面上提到的Xpath參考。

那么你對“管道”的使用是正確的( http://www.tizag.com/xmlTutorial/xpathbar.php )所以我能看到的唯一代碼可能是第二個xpath命令中缺少的+,但是可能是偽代碼,所以我只把它算作半答案。 至於最佳實踐,在我看來,我會抓住子欄元素,然后抓住它的屬性,在那里你需要一個優化,就像你建議的那樣,模糊了被引用的數據。 似乎太多的微型優化,但這只是一個意見。 也許你有很長的屬性列表,你真的在​​節省解析時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM