【问题标题】:Select and manipulate elements in DOM in XML document in jQuery?在jQuery的XML文档中选择和操作DOM中的元素?
【发布时间】:2015-02-22 15:35:40
【问题描述】:

我想在 jQuery 中从 XML 文档的 DOM 中选择元素

这是我目前所拥有的(XML 通常来自另一个来源,而不是字符串,但在这种情况下不相关):

var $xml = prepareXml('<measurement date="24/12/14" ammonia="0" nitrite="0" nitrate="20"></measurement><measurement date="25/12/14" ammonia="0" nitrite="1" nitrate="40"></measurement><measurement date="26/12/14" ammonia="1" nitrite="4" nitrate="55"></measurement>');

function prepareXml(string) {
    var string_xml = string;
    var xml_doc = $.parseXML(string_xml);
    var $xml = $(xml_doc);
    return $xml;
}

我想做的是这样的:

$('measurement').each( function() {
    var date = $(this).attr('date');
    var ammonia = $(this).attr('ammonia');
    [...]
});

等等……

如何从属性中选择元素并访问 XML 文档中的 DOM,而不是运行 javascript 的 HTML 页面。

【问题讨论】:

    标签: javascript jquery xml object dom


    【解决方案1】:

    您的$xml 变量可以只填充$(string)


    然后您可以使用$xml 作为上下文。

    $('measurement', $xml).each(...)
    

    或等效的$xml.find('measurement')

    不过,一个好主意是在您的实时 xml 中包含一个根元素,因为.find和上下文方式)与第一级的内容不匹配。 (除非你使用.filter

    【讨论】:

    • 这是完美的,正是我想要的!现在虽然 jQuery 说我的 XML 无效:[Error] Error: Invalid XML: [...] error (jquery-min-latest.js, line 2) parseXML (jquery-min-latest.js, line 4) prepareXml (js.js, line 11) (anonymous function) (js.js, line 3) j (jquery-min-latest.js, line 2) fireWith (jquery-min-latest.js, line 2) ready (jquery-min-latest.js, line 2) J (jquery-min-latest.js, line 2) 知道出了什么问题吗?
    • @user3002189 你是如何获得 XML 的? Ajax 调用?
    • 我只是用 元素包围了当前元素,问题就消失了。感谢您的帮助,您认真推进了我的小项目:)
    【解决方案2】:

    您的代码的第一个问题是您的数据不是有效的 XML。有效的 XML 文档必须有一个顶级元素,但您的字符串在顶级有多个 measurement 元素。在以下示例中,我将它们包装在 foo 元素中。这有效:

    var xml = '<foo><measurement date="24/12/14" ammonia="0" nitrite="0" nitrate="20"></measurement><measurement date="25/12/14" ammonia="0" nitrite="1" nitrate="40"></measurement><measurement date="26/12/14" ammonia="1" nitrite="4" nitrate="55"></measurement></foo>';
    
    var $xml = $($.parseXML(xml));
    
    $('measurement', $xml).each(function () {
      console.log(this.tagName);
    });
    

    请注意,使用$($.parseXML(xml))通常不等同于使用$(xml)。当您使用parseXML 时,创建的DOM 树是一个实际的XML 文档,其中包含XML 节点。它们具有不同于 HTML 节点的语义。当您使用 $(xml) 时,您正在创建一个 HTML DOM 树。一个区别是如果您检查tagName 字段。在 XML 文档中,它区分大小写并准确反映 XML 源中的内容。在 HTML 文档中,它被规范化为大写。另一个区别是您是否对节点进行序列化。例如,一般而言,带有空元素的 HTML 树不会使用 &lt;name/&gt; 表示法序列化元素,但 XML 树会。

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 2011-07-06
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多