【问题标题】:Javascript XML DOM TrickinessJavascript XML DOM 技巧
【发布时间】: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 对象。鉴于我上面使用的代码,有两种解决方法:

  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)

【问题讨论】:

    标签: javascript xml web-services sharepoint dom


    【解决方案1】:

    您所指的值称为属性

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

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

    【讨论】:

    • 先生,您是一位绅士和一位学者。在我对该问题所做的编辑中还有第三种解决方案。我应该认为它与 JQuery 相关。 :) 感谢您的帮助!
    【解决方案2】:

    我认为您所说的属性是指属性。如果你用这个搜索谷歌,你可能会找到更多有用的答案。我发现这个例如How to access xml attributes using Javascript?

    其中一个答案描述了解决方案如下:

    ===

    对于 xml ,您的 javascript 将是:

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

    ===

    【讨论】:

    • 嗯...它还告诉我 $(this).attributes 未定义。我认为 $(this) 引用本身可能是未定义的......我编辑了这个问题,这可能是一个不同的问题。你能再看看吗?
    • 因为你是在一个函数中做的,所以 $(this) 变量是未知的。尝试在函数声明之前将 $(this) 分配给像 _this = $(this) 这样的帮助变量,并在函数本身中使用该变量
    • 关闭,但没有雪茄; $(this) 在这种情况下是有效的。如果您有兴趣,我会在问题末尾发布解决方案。 :)
    猜你喜欢
    • 2011-08-30
    • 2018-05-26
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多