如何复制 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 并保留命名空间?的主要内容,如果未能解决你的问题,请参考以下文章