Javascript XML DOM 技巧

标签 javascript xml web-services sharepoint dom

全部!我在使用 Javascript 访问 XML 节点的属性时遇到了一些问题。

XML 节点具体如下所示:

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

节点本身没有包含在其标签中的“数据”;它保存的所有数据都是 List 标签的实际修饰符。

Javascript 的 XML DOM 引用提供了很少关于如何访问节点标签修饰符的信息; DOM 引用中的所有方法和属性都涉及子节点以及如何访问节点的内容。当然,这是有道理的,因为 XML 应该是格式良好且漂亮的,但是那些知道 XML 片段来自何处的人已经在笑了,因为这种非常不直观的 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”包含上面的列表片段,是 SharePoint Web 服务的直接 XML 输出。

我假设这段代码找到了所有类型为“List”的节点并遍历它们;这是不正确的吗?

编辑:找到解决方案。显然,当您使用 JQuery 封装一个 Javascript XML DOM 节点时,$(this) 不会给您 DOM 元素,而是给您一个包含 DOM 元素的 JQuery 对象。考虑到我上面使用的代码,有两种解决方法:

  1. var id = $(this).attr('ID');//这是 JQuery 让您访问封装的 XML 节点内的属性的方法 - 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。

希望能帮助遇到类似问题的其他人。 :)

(哦,属性与特性。很高兴知道。:D)

最佳答案

您所指的值称为属性

假设您有对适当元素的引用:

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'));

关于Javascript XML DOM 技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116255/

相关文章:

javascript - 单击按钮获取窗口的屏幕截图

javascript - 如何强制每五分钟重新加载一次网页(仅在事件时)

javascript - 如何使用下拉列表选定的值来刷新表格?

android - 获取 "Sony Internet TV"(Google TV) 市场上的 Android 应用程序

PHP XML 按名称删除元素和所有子元素

java - 在 Tomcat 服务器 8.0 上部署基于 Java 的 Web 服务时出错

ios - 在swift中调用webservice后从异步调用函数返回数据并保存变量

javascript - 当选择文件时更改标签内容 jQuery

java - 使用 XSLT 将 HTML 表格转换为 CSV

python - 将 Cookie 添加到 ZSI 帖子