Как разобрать <img src = "value" из этого XML с помощью DOM?
Это выглядит так в XML. Я хочу получить значение Src Image...
<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);
}
Но это не работает
2 ответа
Решение
Элемент description содержит узел CDATA. Это означает, что <img>
"Элемент", к которому вы пытаетесь получить доступ, на самом деле является просто фрагментом текста (а не элементом вообще).
Вам нужно будет проанализировать текст как новый XML-документ, чтобы получить к нему доступ через методы DOM.
Предупреждение: это может быть немного грязно, и это также может быть хрупким, если 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));
}