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

时间:2019-06-06 11:48:30

标签: java sax

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?

1 个答案:

答案 0 :(得分:0)

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

  

org.jdom2.input.JDOMParseException:第1行发生错误:元素“ f:table”的前缀“ f”没有绑定。

因此,正如我在评论中提到的那样,您需要为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]/>]]