首页 > 解决方案 > 属性上的 Java XML 转换器错误:前缀“req”的命名空间尚未声明

问题描述

我的 XML 在test.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<record>
    <req1:name>john</req1:name>
    <age req:valid="f">57</age>
</record>

我的Java代码:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document  = documentBuilder.parse(getClass().getClassLoader().getResourceAsStream("test.xml"));
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),result);
System.out.println(writer.toString());

运行时transformer.transform会抛出异常

前缀“req”的命名空间尚未声明

如果我从它的工作属性中删除 req: 前缀。req1 前缀也不例外。例外只出现在属性上。

有没有办法禁用这种验证?

我试过了

documentBuilderFactory.setValidating(false);
documentBuilderFactory.setNamespaceAware(false);

但它什么也没改变。

标签: javaxml

解决方案


需要声明命名空间

尝试

<record xmlns:req="http://your-ns-url">
<!-- ... -->
</record>

编辑:

如果您只想摆脱异常,请在转换为字符串之前将 namspace 添加到文档根目录

Element documentElement = document.getDocumentElement();
// Add name space to root element as attribute
documentElement.setAttribute("xmlns:req", "http://you_name_space");

推荐阅读