我使用的getElementsByTagName( 「*」)的Android的DOMParser的getElementsByTagName( 「*」)
文件建立一個說問題
-getElementsByTagName節點列表的getElementsByTagName(字符串名稱)
返回一個節點列表所有具有給定標記名稱的後代元素,文檔順序爲 。
參數:name - 要匹配的標記的名稱。特殊值「*」匹配所有標籤。返回:匹配Element節點的列表。
而它在XML像只返回的第一個元素節點:
<ui>
<entry>
<img>
<icon>...</icon>
<action>image</action>
<data/>
<xpos>2</xpos>
<ypos>47</ypos>
</img>
<btn>
<icon>
http://epic-demo.com/testxml/images/200214050213call.png
</icon>
<action>call</action>
<data>19019</data>
<xpos>128</xpos>
<ypos>61</ypos>
</btn>
<btn>
<icon>
http://epic-demo.com/testxml/images/200214050237map.png
</icon>
<action>url</action>
<data>http://goo.gl/SPBvt</data>
<xpos>236</xpos>
<ypos>165</ypos>
</btn>
<btn>
<icon>
http://epic-demo.com/testxml/images/200214050221video.png
</icon>
<action>video</action>
<data>tMVE2MaLe8I</data>
<xpos>14</xpos>
<ypos>173</ypos>
</btn>
</entry>
</ui>
爲什麼不返回的所有元素?!
分析器
public class XMLDOMParser {
//Returns the entire XML document
public Document getDocument(InputStream inputStream) {
Document document = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = factory.newDocumentBuilder();
InputSource inputSource = new InputSource(inputStream);
document = db.parse(inputSource);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
return document;
}
public String getValue(Element item, String name) {
NodeList nodes = item.getElementsByTagName(name);
return this.getTextNodeValue(nodes.item(0));
}
private final String getTextNodeValue(Node node) {
Node child;
if (node != null) {
if (node.hasChildNodes()) {
child = node.getFirstChild();
while(child != null) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
child = child.getNextSibling();
}
}
}
return "";
}
}
代碼
private ArrayList<UIElement> loadXmlFromNetwork(String urlString)
throws XmlPullParserException, IOException {
InputStream stream = null;
XMLDOMParser parser = new XMLDOMParser();
stream = downloadUrl(urlString);
Document doc = parser.getDocument(stream);
ArrayList<UIElement> UI_array = new ArrayList<UIElement>();
// Get elements by name btn
NodeList btns_entries = doc.getElementsByTagName("*");
for (int j = 0; j < btns_entries.getLength(); j++) {
Element e = (Element) btns_entries.item(j);
UIElement btn = new UIElement();
btn.setIcon(parser.getValue(e, NODE_ICON));
btn.setAction(parser.getValue(e, NODE_ACTION));
btn.setData(parser.getValue(e, NODE_DATA));
btn.setXpos(parser.getValue(e, NODE_XPOS));
btn.setYpos(parser.getValue(e, NODE_YPOS));
UI_array.add(btn);
}
return UI_array;
}
有啥你的問題? – tyczj
爲什麼它不會像文檔說的那樣返回所有元素?! –