在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,而不是运行 javascript 的 html 页面。
【问题讨论】:
【参考方案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 调用?
我只是用 您的代码的第一个问题是您的数据不是有效的 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 树不会使用 <name/>
表示法序列化元素,但 XML 树会。
【讨论】:
以上是关于在jQuery的XML文档中选择和操作DOM中的元素?的主要内容,如果未能解决你的问题,请参考以下文章