0

我想从下面的 xml 打印每个 CHAPTER 的每个 VERS。我的问题是,当我打印该项目时,每章只打印 vers 的第一个元素。然后相同的元素循环 x 次,具体取决于 vers 的数量。

4

1 回答 1

0

该行VERS = parser.getValue(e, "VERS");始终为您提供 CHAPTER 中的第一个 VERS。相反,您必须遍历所有 VERS - 这就是NodeListnodeChapterList的情况。

例子:

代替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 回答