在jQuery的XML文档中选择和操作DOM中的元素?

Posted

技术标签:

【中文标题】在jQuery的XML文档中选择和操作DOM中的元素?【英文标题】:Select and manipulate elements in DOM in XML document in jQuery? 【发布时间】: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,而不是运行 javascripthtml 页面。

【问题讨论】:

【参考方案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 树会。

【讨论】:

以上是关于在jQuery的XML文档中选择和操作DOM中的元素?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中的DOM操作

JQUERY DOM 操作列表

jQuery之DOM操作

前端技术——DOM艺术

jQuery 捕获

jQuery学习