Как создать xml через SAXBuilder с пространством имен? - PullRequest
3 голосов
/ 06 июня 2019

xml as String:

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 является нулевым, и когда я хочу получить rootэлемент, я получаю NullPointerException.

Как я могу генерировать XML из строки с пространством имен?

1 Ответ

0 голосов
/ 06 июня 2019

Вы должны получить org.jdom2.input.JDOMParseException при запуске этого кода.Вот что я получаю:

org.jdom2.input.JDOMParseException: Ошибка в строке 1: префикс "f" для элемента "f: table" не связан.

Итак, как я упоминал в комментариях, вам необходимо предоставить URI пространства имен для префикса f, например:

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]/>]]
...