Как разобрать <img src = «значение» из этого XML с помощью DOM?

1

В XML это выглядит так. Я хочу получить значение изображения src...

<description><![CDATA[<div class="images"><img src="http://www.voicetv.co.th/cache/images/8a1a6f2aeb7b0e9c1d6bb3eae314165f.jpg" /></div>]]></description>

То, что я делаю,

if ((theElement.getElementsByTagName("description")).getLength() > 0) {

            allChildern = theElement.getElementsByTagName("description").item(0).getChildNodes();

            for (int index = 0; index < allChildern.getLength(); index++) {
                description += allChildern.item(index).getNodeValue();

                NodeList chNodes = allChildern.item(index).getChildNodes();
                for (int i = 0; i < chNodes.getLength(); i++) {

                    String name = chNodes.item(i).getNodeName();
                    if(name.equals("div")) {
                        String clas = allChildern.item(index).getAttributes().getNamedItem("class").getNodeValue();
                        if(clas.equals("images")){
                            String nName = allChildern.item(index).getChildNodes().item(0).getNodeName();
                            if(nName.equals("img")) {
                                String nValue = allChildern.item(index).getChildNodes().item(0).getAttributes().getNamedItem("src").getNodeValue();
                            }
                        }
                    }
                }


            }
            currentStory.setDescription(description);
        }

Но не работает

Теги:
domparser

2 ответа

5
Лучший ответ

Элемент описания содержит CDATA node. Это означает, что элемент <img>, который вы пытаетесь получить, на самом деле представляет собой только часть текста (а не элемент вообще).

Вам нужно проанализировать текст как новый XML-документ, чтобы получить доступ к нему с помощью методов DOM.

  • 0
    Я просто получаю значение узла описания. Вставить тег в <data> </ data>. В качестве DOM допускается 1 корневой элемент. Здесь это выглядит как DocumentBuilderFactory fectory = DocumentBuilderFactory.newInstance (); DocumentBuilder builder = fectory.newDocumentBuilder (); InputStream inputStream = new ByteArrayInputStream (("<data>" + currentStory.getDescription () + "</ data>"). GetBytes ("UTF-8")); Document document = builder.parse (inputStream); String imageURL = document.getElementsByTagName ("img"). Item (0) .getAttributes (). GetNamedItem ("src"). GetNodeValue (); currentStory.setImagePath (ImageUrl);
0

Предупреждение: это может быть немного грязно, и оно также может быть хрупким, если xml может содержать комментарии, содержащие что-то похожее на теги изображений.

Альтернатива использованию синтаксического анализа xml для этого короткого фрагмента xml, который имеет раздел cdata, заключается в получении URL-адреса изображения с использованием regexp. Вот пример:

String xml = "<description><![CDATA[<div class=\"images\"><img src=\"http://www.voicetv.co.th/cache/images/8a1a6f2aeb7b0e9c1d6bb3eae314165f.jpg\"/></div>]]></description>";
Matcher matcher = Pattern.compile("<img src=\"([^\"]+)").matcher(xml);
while (matcher.find()) {
    System.out.println("img url: " + matcher.group(1));
}
  • 0
    Спасибо, что это может быть вариантом. Дай мне проверить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню