Document doc = getDomElement(response); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
String name = getValue(e, KEY_NAME);
String description = getValue(e, KEY_DESC);
Log.e("description:", description);
}
public String getValue(Element item, String str) {
NodeList n = item.getElementsByTagName(str);
return this.getElementValue(n.item(0));
}
public final String getElementValue(Node elem) {
Node child;
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child.getNextSibling()) {
if ((child.getNodeType() == Node.TEXT_NODE) || (child.getNodeType() == Node.ELEMENT_NODE) ) {
return child.getNodeValue();
}
}
}
}
return "";
}
在上面,响应是一个XML rss feed,一个孩子在下面。发生的事情是我能够获得标题,发布,更新。但是当我使用getValue(e,“content”)时,我得到空字符串。我还想获得作者姓名。
<entry>
<title>Title1</title>
<link rel="alternate" type="text/html" href="http://www.example.com" />
<id>ID</id>
<published>2012-09-08T18:45:40Z</published>
<updated>2012-09-08T18:43:01Z</updated>
<author>
<name>Author name</name>
<uri>http://www.example.com</uri>
</author>
<content type="html" xml:lang="en" xml:base="http://www.example.com/">
<p>Test Test</content>
</entry>
答案 0 :(得分:1)
在代码中
public final String getElementValue(Node elem) {
Node child;
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child.getNextSibling()) {
if ((child.getNodeType() == Node.TEXT_NODE) || (child.getNodeType() == Node.ELEMENT_NODE) ) {
return child.getNodeValue();
}
}
}
}
return "";
}
您只从第一个子文本节点获取文本。内容可以拆分为多个文本节点。您可能希望从所有子文本节点收集文本。
public final String getElementValue(Node elem) {
Node child;
StringBuilder sb = new StringBuilder();
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child.getNextSibling()) {
if ((child.getNodeType() == Node.TEXT_NODE) || (child.getNodeType() == Node.ELEMENT_NODE) ) {
sb.append(child.getNodeValue());
}
}
}
}
return sb.toString();
}
要获取作者姓名值,您需要先在层次结构中降低另一个级别,因为“name”标记嵌套在“author”标记内。当您遍历顶级节点以找到“作者”节点然后获取其子“名称”节点时,这将意味着一些特殊处理。