В 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);
}
Но не работает
Элемент описания содержит CDATA node. Это означает, что элемент <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));
}