【发布时间】:2011-05-24 20:10:29
【问题描述】:
全部!我在使用 Javascript 访问 XML 节点的属性时遇到了一些问题。
XML 节点具体如下所示:
<List DocTemplateUrl="" DefaultViewUrl="/Lists/Announcements/AllItems.aspx" MobileDefaultViewUrl="" ID="{blahblahblahblah}" ... />
节点本身的标签中不包含“数据”;它保存的所有数据都是 List 标签的实际修饰符。
Javascript 的 XML DOM 参考几乎没有提供关于如何访问节点标签修饰符的信息; DOM 引用中的所有方法和属性都引用子节点以及如何访问节点的内容。当然,这是有道理的,因为 XML 应该是格式良好且漂亮的,但是那些知道 XML sn-p 来自哪里的人已经笑了,因为那个可怕的不直观的 XML 是直接从 Microsoft SharePoint 的 Web 服务输出的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”包含上面的列表 sn-p,是 SharePoint Web Services 的直接 XML 输出。
我假设这段代码找到了所有类型为“List”的节点并遍历它们;这是不正确的吗?
编辑:找到解决方案。显然,当您使用 JQuery 封装 Javascript XML DOM 节点时,$(this) 不会给您 DOM 元素,而是给您一个包含 DOM 元素的 JQuery 对象。鉴于我上面使用的代码,有两种解决方法:
var id = $(this).attr('ID'); // 这是 JQuery 让您在封装的 XML 节点中访问属性的方式 - attr() 不是标准 Javascript XML DOM 的一部分,因为 $(this) 不是 XML DOM 元素。
var id = $(this).get(0).attributes.getNamedItem("ID").value; // 这是 Javascript 的方式。在这里,我们调用 get(0) 从 JQuery 的封装对象中返回实际的 XML DOM 节点;之后,我们可以调用任何我们想要的 Javascript XML DOM 方法。我使用这种方法是因为我知道 Javascript XML DOM,并且我更愿意在 GUI 生成之外尽可能少地使用 JQuery。
希望对遇到类似问题的其他人有所帮助。 :)
(哦,还有属性与属性。很高兴知道。:D)
【问题讨论】:
标签: javascript xml web-services sharepoint dom