繁体   English   中英

Javascript XML DOM 技巧

[英]Javascript XML DOM Trickiness

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

XML 节点尤其如下所示:

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

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

Javascript 的 XML DOM 参考几乎没有提供有关如何访问节点标签修饰符的信息; DOM 引用中的所有方法和属性都引用子节点以及如何访问节点的内容。 This makes sense, of course, because XML is supposed to be well-formed and pretty, but those of you who know where that XML snippet came from are already laughing, because that horribly unintuitive XML is directly output from Microsoft SharePoint's 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”包含上面的列表片段,并且是直的 XML output 来自 SharePoint ZC6E190B2846493DACCEE8

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

编辑:找到解决方案。 Apparently, when you use JQuery to encapsulate a Javascript XML DOM Node, $(this) does NOT give you the DOM element, but instead gives you a JQuery object that contains the DOM element. 鉴于我上面使用的代码,有两种方法可以解决这个问题:

  1. var id = $(this).attr('ID'); // This is JQuery's way of letting you access attributes within an encapsulated XML node - attr() is NOT part of the standard Javascript XML DOM, because $(this) is NOT an XML DOM element.

  2. var id = $(this).get(0).attributes.getNamedItem("ID").value; // 这是 Javascript 的方式。 这里,我们调用 get(0) 从 JQuery 封装的 object 中返回实际的 XML DOM 节点; 之后,我们可以调用我们想要的任何 Javascript XML DOM 方法。 我使用这种方法是因为我知道 Javascript XML DOM,而且我更喜欢在 GUI 生成之外尽可能少地使用 JQuery。

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

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

我认为您所说的属性是指属性。 如果你用它打谷歌,你可能会找到更多有用的答案。 例如,我发现了这个如何使用 Javascript 访问 xml 属性? .

那里的答案之一描述了解决方案,如下所示:

===

对于 xml,您的 javascript 将是:

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

===

您所指的值称为属性

假设您引用了适当的元素:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM