我想从下面的xml打印每个章节的每个VERS。我的问题是,当我打印项目时,每章只打印vers的第一个元素。然后,相同的元素循环x次,具体取决于vers的数量。
答案 0 :(得分:0)
行VERS = parser.getValue(e, "VERS");
始终为您提供章节中的第一个VERS。相反,你必须遍历所有VERS - 在你的情况下是NodeList
的{{1}}。
示例:
替换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();
}
}
的文件中(顺便说一下。我很高兴你在前7天后停止复制圣经:-)我得到了这个输出:
asset/bible.xml
DOM和代码的说明:
我直接从经文列表开始。为了得到这一章,我只是去父母(这是章节)并获得它的属性。
DOM的元素(如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
....
)将CDATA视为额外的子节点。这就是为什么我在每个<VERS/>
上额外getChildNodes()
。