我想从下面的 xml 打印每个 CHAPTER 的每个 VERS。我的问题是,当我打印该项目时,每章只打印 vers 的第一个元素。然后相同的元素循环 x 次,具体取决于 vers 的数量。
问问题
388 次
1 回答
0
该行VERS = parser.getValue(e, "VERS");
始终为您提供 CHAPTER 中的第一个 VERS。相反,您必须遍历所有 VERS - 这就是NodeList
您nodeChapterList
的情况。
例子:
代替VERS = parser.getValue(e, "VERS");
和VERS = parser.getValue((Element) nodeChapterList.item(chap), "VERS");
编辑:我再次检查了您的代码并更改了使其正常工作所需的内容。
public final void test(Context context) {
try {
InputStream getXML = context.getResources().getAssets().open("bible.xml");
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(getXML);
NodeList verses = document.getElementsByTagName("VERS");
for (int i = 0; i < verses.getLength(); i++) {
Node vers = verses.item(i);
String chapter_number = vers.getParentNode().getAttributes().getNamedItem("cnumber").getNodeValue();
String vers_text = vers.getChildNodes().item(0).getNodeValue();
String vers_number = vers.getAttributes().getNamedItem("vnumber").getNodeValue();
Log.d("STACKOVERFLOW", "vers: " + chapter_number + ", " + vers_number + " >" + vers_text + "<");
}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (FactoryConfigurationError e) {
e.printStackTrace();
}
}
将圣经中的文本放入文件中asset/bible.xml
(顺便说一句。我很高兴您在前 7 天后停止复制圣经 :-) 我得到以下输出:
08-24 22:35:35.463: D/STACKOVERFLOW(17950): vers: 1, 1 >Au commencement, Dieu créa les cieux et la terre.<true, 1
08-24 22:35:35.463: D/STACKOVERFLOW(17950): vers: 1, 2 >La terre était informe et vide: il y avait des ténèbres à la surface de l'abîme, et l'esprit de Dieu se mouvait au-dessus des eaux.<true, 1
08-24 22:35:35.473: D/STACKOVERFLOW(17950): vers: 1, 3 >Dieu dit: Que la lumière soit! Et la lumière fut.<true, 1
....
DOM及代码说明:
我直接从经文列表开始。要获取章节,我只需上到父级(即章节)并获取其属性。
DOM 的元素(如
<VERS/>
)将其中的 CDATA 视为额外的子节点。这就是为什么我getChildNodes()
对每个vers
.
于 2013-09-17T06:20:32.387 回答