如何输出包含全局命名空间定义的单个 DOM 节点

发布于 2024-12-11 16:47:48 字数 590 浏览 0 评论 0原文

我有一个 DOM 文档,我使用 XPath 提取某个节点。之后我想将该节点序列化为 XML。我正在使用以下代码:

TransformerFactory
        .newInstance()
        .newTransformer()
        .transform(new DOMSource(node),
                new StreamResult(getOutputStream()));

这在一个简单的文档中工作,但请考虑以下文档:

<xml xmlns:foo="...">
  <bar foo:bar="xyz" />
</xml>

在这种情况下,如果我想序列化节点“bar”,那么上面的代码就会中断,因为变压器说:

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

如何让转换器将命名空间定义复制到新文档中?

I have a DOM-Document and I extract a certain node using XPath. After that I want to serialize that node to XML. I am using the following code:

TransformerFactory
        .newInstance()
        .newTransformer()
        .transform(new DOMSource(node),
                new StreamResult(getOutputStream()));

This works in a simple document, but consider the following document:

<xml xmlns:foo="...">
  <bar foo:bar="xyz" />
</xml>

In this case if I want to serialize the node "bar", then the code above breaks, because the transformer says:

Namespace for prefix 'foo' has not been declared

How can I get the transformer to copy the namespace definitions into the new document?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音盲 2024-12-18 16:47:48

将您的 DocumentBuilderFactory 设置为命名空间感知。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

Set your DocumentBuilderFactory to be namespace aware.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文