如何复制 XMLList 并保留命名空间?

Posted

技术标签:

【中文标题】如何复制 XMLList 并保留命名空间?【英文标题】:How do I copy an XMLList and keep the namespace? 【发布时间】:2017-04-23 17:12:46 【问题描述】:

有没有办法复制 XMLList 并保留命名空间?当我在 XMLList 上使用 copy() 方法时,似乎正在删除命名空间。

代码:

var xml:XML = <s:Label xmlns:s="library://ns.adobe.com/flex/spark"><s:color>red</s:color>
        test level</s:Label>;

var elementsXMLList:XMLList = xml.elements();
trace(elementsXMLList.toXMLString()); // has namespaces

var elementsCopy:XMLList = elementsXMLList.copy();
trace(elementsCopy.toXMLString()); // does not have namespaces

elementsXMLList.toXMLString():

<s:color xmlns:s="library://ns.adobe.com/flex/spark">red</s:color>

elementsCopy().toXMLString():

<color xmlns="library://ns.adobe.com/flex/spark">red</color>

我需要能够在制作副本时保留命名空间。

【问题讨论】:

我不明白为什么不var copy:XML = new XML(xml.toXMLString()); 顺便说一句,在 XML 上而不是在 XMLList 上执行 copy() 会保留命名空间。 【参考方案1】:

这一定是因为它是s:Label 节点包含命名空间声明。 xml.elements() 为您提供属于 s:Label 的树的一部分的 xml 元素列表,因此它们确实知道它们的命名空间。当您执行 elements.copy() 时,虽然您会获得一个单独的 XML 元素列表,这些元素不再是具有 xmlns:s 的树的一部分。

我建议您复制以s:Label 开头的整个树,然后获取其元素,而不是另一种方式。

【讨论】:

以上是关于如何复制 XMLList 并保留命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中通过 ElementTree 解析 xml 时如何保留命名空间

如何在python中重新加载命名空间? [复制]

如何从命名空间导出,访问默认值? [复制]

如何为多个命名空间配置 ProGuard 保留选项?

来自 :: 命名空间的 MFC 函数? [复制]

如何使用 xslt 将父节点命名空间复制到子元素?