从XML向(X)HTML添加节点
我正在处理一个JavaScript脚本,它从外部源获取XML,并将XML文件中的节点添加到(X)HTML文档中 我有下面的代码。(未测试,仅为原型)从XML向(X)HTML添加节点,xml,xhtml,Xml,Xhtml,我正在处理一个JavaScript脚本,它从外部源获取XML,并将XML文件中的节点添加到(X)HTML文档中 我有下面的代码。(未测试,仅为原型) var目的地;//XHTML文档中的 var nodes=xmlDoc.getElementsByTagName(“项”);//XML节点 对于(变量i=0;i
var目的地;//XHTML文档中的
var nodes=xmlDoc.getElementsByTagName(“项”);//XML节点
对于(变量i=0;i
我想知道这个解决方案是否可行,因为节点属于不同的名称空间
谢谢大家! 似乎
importNode()
正在做您想做的事情
这是标准的DOM级别2方法,请参见:
摘要从可插入当前文档的外部文档创建节点副本
即使这是一种标准方法,也要测试跨浏览器支持。@Tomolak:XHTML。编辑问题!您在这里附加到XML
节点。appendChild(item)
不附加到XHTML,它甚至是一个集合而不是节点,没有appendChild
method@KARASZIIstván:修改了代码…打算将其附加到目标
,现在有点不自觉了。@Ryan:你看到importNode()
?-:“从可插入当前文档的外部文档创建节点副本。”看起来您正在将外部XML中的元素添加到XHTML文档中。如果这些元素不是有效的XHTML元素(以及正确的名称空间),则生成的文档将不再是有效的XHTML。据我所知,XHTML不支持混合任意名称空间。@Tomalak:我尝试了一下,不幸的是它不起作用……导入的
节点不显示为链接。@Tomalak:是,渲染结果的上半部分,Firebug窗格的下半部分。这与将XML子级直接附加到XHTML文档中的行为相同。@RyanLi:您能检查导入的节点位于哪个命名空间中吗?看起来
不在XHTML名称空间中,因此无法识别。@Tomalak:Firebug告诉我它的名称空间URI
为空…@RyanLi:这就是它不起作用的原因。名称空间必须存在,但importNode()
复制原始名称空间。有关可能有用的跨浏览器安全替代方案,请参阅。它重新创建节点而不是导入它们,因此它们将继承正确的名称空间。
var destination; // an <ul> in XHTML document
var nodes = xmlDoc.getElementsByTagName("item"); // XML nodes
for (var i = 0; i < nodes.length; ++i) {
var item = document.createElement("li"); // XHTML document
item.appendChild(nodes[i].cloneNode(true));
destination.appendChild(item);
}