XMLStreamWriter writeAttribute含冒号属性名抛异常,求正确写法
XML命名空间属性写入报错的正确解决方法
直接使用writer.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")会触发报错,原因是XML中属性名里的冒号是命名空间前缀的分隔符,不能将xmlns:xsi当作普通属性名传递,必须通过XML API的专门方法处理命名空间绑定。
以下是两种常见XML写入工具的正确写法:
1. 使用StAX的XMLStreamWriter
调用带命名空间参数的重载方法,明确传递命名空间相关信息:
// 方式一:先设置前缀映射,自动生成命名空间属性 writer.setPrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance"); // 方式二:直接写入命名空间属性 writer.writeAttribute( "http://www.w3.org/2000/xmlns/", "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
注:第一个参数是xmlns自身的标准命名空间URI,第二个是前缀xsi,第三个是目标命名空间的URI。
2. 使用JDOM的Element
通过Namespace类声明命名空间,输出时会自动生成对应属性:
Namespace xsiNs = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); element.addNamespaceDeclaration(xsiNs);
无论哪种方式,最终都会输出符合要求的xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"属性,同时避免非法字符报错。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

