Не удается преобразовать строку XML в документ W3C - PullRequest
1 голос
/ 09 февраля 2012

Я хочу преобразовать строку Java, содержащую xml, в объект документа w3c dom.

Сначала я искал повсюду и нашел несколько хороших примеров здесь для stackoverflow. Но, к сожалению, я могу заставить их работать!

Очевидно, мой код не работает на 100%.

Кажется, что он анализирует строку, но в узлах нет значений. Это то, что я получил до сих пор!

Document newDoc = null;

InputSource is = new InputSource();
is.setCharacterStream(new StringReader(TestFiles.RSS_FEED_FILE_2));

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = null;
builder = factory.newDocumentBuilder();
newDoc = builder.parse(is);

Когда я потом делаю сисут, вот так:

System.out.println(newDoc.getDocumentElement().getElementsByTagName("channel").item(0)
.getNodeValue());

Я получил ноль в качестве вывода при использовании этого sysout:

System.out.println(newDoc.getDocumentElement().getElementsByTagName("channel").item(0));

Я получил в качестве вывода: [канал: ноль]

Таким образом, у меня есть объект, иначе он будет генерировать исключения из нулевого указателя, но он не содержит никаких значений внутри!

Содержание константы таково:

public final static String RSS_FEED_FILE_2 =    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
                                            "<rss version=\"2.0\">\n" + 
                                            "<channel>\n" + 
                                            "<title>sunday</title>\n" + 
                                            "<link>http://www.google.nl</link>\n" + 
                                            "<pubDate>2012-02-05 20:58</pubDate>\n" + 
                                            "<lastBuildDate>2012-02-08 09:48</lastBuildDate>\n" + 
                                            "<description>blabla </description>\n" + 
                                            "<item>\n" + 
                                            "<title><![CDATA[title]]></title>\n" + 
                                            "<link><![CDATA[http://www.google.nl]]></link>\n" + 
                                            "<guid><![CDATA[2266610]]></guid>\n" + 
                                            "<source><![CDATA[sunday]]></source>\n" + 
                                            "<author><![CDATA[me]]></author>\n" + 
                                            "<description><![CDATA[blalbalavblabllllll!]]></description>\n" + 
                                            "</item>\n" + 
                                            "</channel>\n" + 
                                            "</rss>";

У кого-нибудь есть решение или подсказка?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Это довольно распространенная ошибка. Поведение getNodeValue() зависит от подкласса Node . В случае Element getNodeValue() будет всегда возвращать null (см. Таблицу в Node javadoc для поведения других подклассов).

Попробуйте использовать getTextContent(), если хотите отладить документ XML.

1 голос
/ 09 февраля 2012

Поскольку вы пытаетесь загрузить XML-строку RSS, я могу предложить вам использовать RSS XSD из http://www.thearchitect.co.uk/schemas/rss-2_0.xsd.. Это поможет вам в загрузке строки RSS и предоставит вам лучший способ редактирования данных или преобразования. это для любых направлений, таких как файл. Это будет нуждаться в JAXB, чтобы работать хотя. Надеюсь, это поможет.

0 голосов
/ 09 февраля 2012

Использование jdom требует больших усилий при обработке XML, и обычно это мой первый порт вызова.

Если использование jdom является опцией, сборка документа тривиальна.

SAXBuilder builder = new SAXBuiler();
Document doc = builder.build(new StringReader(YOUR_XML_STRING));

Следует помнить, что при этом создается объект org.jdom.Document, который затем необходимо адаптировать к документу w3c.Опять же, это довольно легко достигается с помощью класса org.jdom.output.DOMOutputter.

...