2011-05-24 57 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