2011-05-24 59 views
1

all!我遇到了一些使用Javascript訪問XML節點屬性的問題。Javascript XML DOM Trickiness

類似下面的特別外觀的XML節點:

<List DocTemplateUrl="" DefaultViewUrl="/Lists/Announcements/AllItems.aspx" MobileDefaultViewUrl="" ID="{blahblahblahblah}" ... /> 

本身沒有「數據」節點包含在其標籤內;它所包含的所有數據都是List標籤的實際修飾符。

Javascript的XML DOM參考提供了關於如何訪問節點標籤修飾符的信息; DOM引用中的所有方法和屬性都指向子節點以及如何訪問節點的內容。這當然是有道理的,因爲XML應該是格式良好而且美觀的,但是那些知道XML片段來自哪裏的人已經在笑,因爲這個可怕的直覺XML直接從Microsoft SharePoint的Web Services API輸出。 :)

無論如何,這是除了點。如果有人知道如何使用Javascript的XML DOM訪問XML節點的屬性,我真的很感謝一些幫助。 :D

編輯:問題可能有所不同。我的意思是屬性,而不是屬性;這幫助了一大堆。但是,它仍然告訴我所有的XML DOM節點屬性和方法都是未定義的;我認爲我用來訪問方法的實際引用是未定義的。下面是我用它來生成它的代碼:

var xmlDoc = $.parseXML(xml); 
$(xmlDoc).find('List').each (
    function() 
    { 
     var id = $(this).attributes.getNamedItem("ID").value; 
     alert(id); 
    }); 

其中「XML」所包含的List代碼段的上方,並且是從SharePoint Web服務輸出XML直。

我假設這段代碼找到了所有類型爲'List'的節點並遍歷它們;這是不正確的?

編輯:找到解決方案。顯然,當你使用JQuery封裝一個JavaScript XML DOM節點時,$(this)不會給你DOM元素,而是給你一個包含DOM元素的JQuery對象。有兩種方法,給定我使用上面的代碼:

  1. var id = $(this).attr('ID'); //這是讓您訪問封裝的XML節點內的屬性的JQuery方法--attr()不是標準Javascript XML DOM的一部分,因爲$(this)不是XML DOM元素。

  2. var id = $(this).get(0).attributes.getNamedItem(「ID」)。value; //這是Javascript的方式。在這裏,我們調用get(0)從JQuery的封裝對象中返回實際的XML DOM節點;之後,我們可以調用任何我們想要的Javascript XML DOM方法。我使用這種方法是因爲我知道Javascript XML DOM,並且我傾向於在GUI生成之外儘可能少地使用JQuery。

希望能幫助任何人遇到類似的問題。 :)

(呵呵,和屬性VS性能好消息:。d)

回答

2

您所指的值稱爲屬性

假設你必須適當的元件的引用:

var mobileDefaultViewUrl = element.getAttribute('MobileDefaultViewUrl'); 

用於基於Mozilla的瀏覽器的更完整的例子:

var xmlText = "<root><element id='elementId' attribute1='test1' attribute2='test2' /></root>"; 

var parser=new DOMParser(); 
var dom=parser.parseFromString(xmlText,"text/xml");  
var element = dom.getElementsByTagName('element')[0]; 

console.log(element.getAttribute('attribute1')); 

在jQuery中:

var xml = "<root><element id='elementId' attribute1='test1' attribute2='test2' /></root>", 
    xmlDoc = $.parseXML(xml), 
    $xml = $(xmlDoc), 
    $element = $xml.find("element"); 

console.log($element.attr('attribute1')); 
+0

您,先生,是一位紳士和學者。我對這個問題所做的編輯還有第三種解決方案。我應該認爲它是與JQuery相關的。 :) 謝謝你的幫助! – sichinumi 2011-05-24 20:42:45

2

我想你的意思是說財產屬性。如果你點擊Google,你會發現更多有用的答案。我發現這個例如How to access xml attributes using Javascript?

答案之一有介紹的解決方案如下:

===

對於XML,你的JavaScript將是:

document.getElementByTagname("person").attributes.getNamedItem("name").value;

===

+0

嗯..它也告訴我$(this).attributes是未定義的。我認爲$(this)引用本身可能是未定義的......我編輯了這個問題,這可能是一個不同的問題。你能再看一次嗎? – sichinumi 2011-05-24 20:29:22

+0

因爲你在函數中做了這個,所以$(this)變量是未知的。嘗試在函數聲明之前將$(this)賦值給一個幫助變量,如_this = $(this),並在函數本身中使用該變量 – 2011-05-24 20:34:38

+1

關閉但不包含雪茄; $(this)在該上下文中有效。如果您有興趣,我會在問題結束時發佈解決方案。 :) – sichinumi 2011-05-24 20:43:26