【问题标题】:How to generate xml via SAXBuilder with namespace?如何通过带有命名空间的 SAXBuilder 生成 xml?
【发布时间】:2019-06-06 11:48:30
【问题描述】:

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?

【问题讨论】:

  • 我认为你需要 &lt;?xml...&gt; 处理指令和 xmlns:f="...namespace..." 在你的 &lt;table&gt; 元素中。

标签: java sax


【解决方案1】:

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

org.jdom2.input.JDOMParseException:第 1 行出错:元素“f:table”的前缀“f”未绑定。

所以正如我在 cmets 中提到的,您需要为 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]/>]]

【讨论】:

  • 您好,您的解决方案适用于从 b8 开始的 jdom 版本,但我使用的是 b7 版本,我无法更改版本。在版本 b7 中,属性没有命名空间。
  • @millka_15 我刚刚用 b7 进行了测试,对我来说效果很好。
  • 你有属性的命名空间吗?
  • 我不明白你的问题。如果您现在的问题与其他问题有关,请编辑您的问题以反映您实际遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多