为了账号安全,请及时绑定邮箱和手机立即绑定

将 DOM 节点呈现为字符串而不在 Java 中指定命名空间

将 DOM 节点呈现为字符串而不在 Java 中指定命名空间

慕田峪9158850 2021-09-26 16:57:38
我的一个使用 Java 的项目需要基于抽象表示输出 XML,该表示被建模为自己的类/数据类型。考虑到这个功能public static String renderToString(Node element) {    TransformerFactory transformerFactory = TransformerFactory.newInstance();    Transformer transformer = null;    try {        transformer = transformerFactory.newTransformer();        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");        transformer.setOutputProperty(OutputKeys.INDENT, "yes");    } catch (TransformerConfigurationException e) {        e.printStackTrace();    }    DOMSource source = new DOMSource(element);    StreamResult result = new StreamResult(new StringWriter());    try {        transformer.transform(source, result);    } catch (TransformerException e) {        e.printStackTrace();    }    return result.getWriter().toString();}我编写了一个测试,它构造了一个等效于<FIELD ID="1" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="8000" COLLATION="SQL_Latin1_General_CP1_CI_AS" />这是由以下函数生成的public static Element createFieldElement(Document doc) {    Element fieldElement = doc.createElement("FIELD");    ...    fieldElement.setAttribute("xsi:type", "CharTerm");    return fieldElement;}将此元素传递给函数我现在收到一个错误,告诉我缺少 'xsi' 命名空间(它与 xsi:type 属性一起使用),这是有道理的,因为我尝试呈现的元素不是完整的 XML 文档。是否有我必须设置的选项或任何方法来绕过 XML 命名空间声明以保持我的代码可测试?否则我会尝试模拟一些函数来欺骗 Transformer 渲染元素,但我不会建议这是一个方便的选择。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信