java - 属性上的 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);
但它什么也没改变。
解决方案
需要声明命名空间
尝试
<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");
推荐阅读
- javascript - D3.js Force Directed Graph with Json - 创建图指定到所有节点的链接距离
- swift - Firestore - 创建集合的副本
- javascript - 在 Javascript 中切换 [吐出相同的值]
- asp.net-core - 有没有办法在 aspnetcore 配置中的 appsetting.json 字典键中转义冒号?
- python - 对于未在 python 3 Discord.py bot mass DM 中完成的循环失败
- java - Xlint 弃用
- kubernetes - kubernetes podAffinity 优先级分数是如何计算的?
- mysql - 在 MySQL 中编写触发器时出现语法错误
- google-cloud-platform - GCP 负载平衡器显示“无效指纹”
- php - Laravel 关系不起作用但外键有价值