java为缺少命名空间的xml元素添加前缀
我将收到一些预生成的xml文档作为字符串,我需要为任何缺少前缀的xml元素添加前缀。比如
输入:
<a xmlns:b="http://www.b.com">
<element1>test</element1>
<b:element2>test</b:element2>
</a>
输出:
<c:a xmlns:b="http://www.b.com" c="http://www.c.com">
<c:element1>test</c:element1>
<b:element2>test</b:element2>
</c:a>
我将文档解析为一个节点,但我不知道如何为任何缺少前缀的元素添加前缀。我本来打算用一些正则表达式字符串替换,但我认为这在JavaXMLAPI中应该是可能的,我只是被卡住了
# 1 楼答案
下面的XSLT 1.0转换将把所有无名称空间元素移动到前缀为“c”、uri为“c”的名称空间中http://www.c.com“
# 2 楼答案
虽然Michael的答案肯定是一种“正确”的方法,但如果您想要一个更简单的解决方案,而不使用XSLT来处理手头的XML,您可以用
<a xmlns="http://www.c.com" xmlns:b="http://www.b.com">
替换<a xmlns:b="http://www.b.com">
。这引入了http://www.c.com
作为默认名称空间,以分配给任何没有显式名称空间前缀的元素。不过请注意,这并不像Michael的解决方案那样通用如果不想在字符串级别操作XML,也可以解析和重写XML,例如使用Java的
XMLStreamWriter
类,尤其是setDefaultNamespace()
和writeDefaultNamespace()
方法