如何通过带命名空间的 SAXBuilder 生成 xml?

How to generate xml via SAXBuilder with namespace?

xml 作为字符串:

String inputStr = "<f:table f:id=\"1\">\n" +
                "  <f:name>African Coffee Table</f:name>\n" +
                "  <f:width>80</f:width>\n" +
                "  <f:length>120</f:length>\n" +
                "</f:table>";

我想生成这个 xml 到 jdom 文档:

StringReader stringReader = new StringReader(inputStr);
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(stringReader);

但是 doc 是空的,当我想获取根元素时,我得到一个 NullPointerException.

如何从带有命名空间的字符串生成 xml?

当您 运行 该代码时,您应该会得到一个 org.jdom2.input.JDOMParseException。这是我得到的:

org.jdom2.input.JDOMParseException: Error on line 1: The prefix "f" for element "f:table" is not bound.

因此,正如我在评论中提到的,您需要为 f 前缀提供命名空间 URI,如下所示:

String inputStr = "<f:table f:id=\"1\" xmlns:f=\"http://millka_15.namespace\">\n" +

我刚刚使用 http://millka_15.namespace 作为占位符,我假设您知道实际的命名空间 URI 应该是什么。

以下代码:

String inputStr = "<f:table f:id=\"1\" xmlns:f=\"http://millka_15.namespace\">\n" +
        "  <f:name>African Coffee Table</f:name>\n" +
        "  <f:width>80</f:width>\n" +
        "  <f:length>120</f:length>\n" +
        "</f:table>";

StringReader stringReader = new StringReader(inputStr);
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(stringReader);

System.out.println(doc);

此输出结果:

[Document:  No DOCTYPE declaration, Root is [Element: <f:table [Namespace: http://millka_15.namespace]/>]]