2010-11-06 83 views
2

我有一個XML文檔中的引號列表。每個報價被包裹這樣的:奇怪的jQuery XML問題

<Item> 
    <Quote>This is a quote!</Quote> 
    <Source>-- this is the Source of the Quote!</Source> 
</Item> 

這裏是jQuery的:

var html = ''; 
    var tmpl = '<li class=""><p class="quote">__quote</p><p class="source">__source</p></li>'; 

    $(quoteObj).find('Item').each(function(){ 

     $that = $(this); 

     var _quote = $that.children('Quote').text(); 
     var _source = $that.children('Source').text(); 

     var qhtml = tmpl.replace('__quote', _quote).replace('__source', _source); 

     html += qhtml; 

    }); 

    return html; 

在最終產品中,QUOTES都在那裏,但SOURCES都沒有。我不能爲了我的生活找出原因。我看不到的是什麼?

附加信息來回答註釋:

  1. XML被適當地形成,並且我改變了它的上方。
  2. 我添加了var tmpl這一行來顯示我在循環中替換的內容。 __quote正在被替換,並且__source至少被執行,因爲第二個<p>是空的,而不是包含一個字符串。
  3. 我已經檢查了從AJAX調用返回的實際XML,並且它都在那裏,因爲它應該是。

在我看來,這是某種形式的問題與確定範圍和this,或與.children()方法的作用,但我仍然無法找到它。

最後一個注意:

改變了XML標籤情況下初始上限,這是有問題的文件內。

+2

您能發佈實際的XML嗎?您的示例格式不正確(這可能是您的問題的答案,或者可能是您快速向我們展示某個內容的快捷方式) – 2010-11-06 04:33:56

+0

是否爲Source提供了xml中的值。它應該是sraight向前檢查,只需點擊firebut中的斷點即可輕鬆檢查。 – kobe 2010-11-06 04:49:15

+0

@hollenback,只是更多的信息,如果你正在獲得結果,然後在循環中添加一個斷點並檢查值,請檢查是否通過.net面板從後端獲取結果。 – kobe 2010-11-06 04:54:39

回答

1

只是嘗試這樣做,我不得不改變的唯一的事情就是find線到XML節點的情況下匹配,如

$(quoteObj).find('ITEM').each(function() { 

我也改變了$that分配行,以包括var關鍵字,但它在我之前工作

var $that = $(this); 
+0

是你做的唯一改變嗎?因爲它不適用於我的改變。你可以用谷歌上的jQuery測試它,看看你得到了什麼結果?鏈接到谷歌的jQuery文件: Zabba 2010-11-08 06:08:15

+0

這就是我在用什麼 – Phil 2010-11-08 06:14:16

+0

超級怪異。想知道爲什麼我可以讓它適應您的變化?謹慎發佈完整的例子? – Zabba 2010-11-08 06:15:19

3

jQuery不解析XML。將一個XML字符串傳遞給$()只是將該字符串指定爲元素的innerHTML屬性,該元素具有可變和不可預知的結果。您需要使用瀏覽器的內置XML解析器自己解析XML,然後將生成的文檔傳遞給jQuery:

var parseXml; 

if (window.DOMParser) { 
    parseXml = function(xmlStr) { 
     return (new window.DOMParser()).parseFromString(xmlStr, "text/xml"); 
    }; 
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) { 
    parseXml = function(xmlStr) { 
     var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xmlStr); 
     return xmlDoc; 
    }; 
} else { 
    parseXml = function() { return null; } 
} 


var xmlStr = "<Item><Quote>This is a quote!</Quote><Source>-- this is the Source of the Quote!</Source></Item>"; 

var xmlDoc = parseXml(xmlStr); 
$xml = $(xmlDoc); 

$xml.find('Item').each(function() { 
    // Do stuff with each item here 
    alert("Item"); 
});