全部!我在使用 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 对象。考虑到我上面使用的代码,有两种解决方法:
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)
最佳答案
您所指的值称为属性。
假设您有对适当元素的引用:
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/