2

我想解析这个 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="descripciones">
        <item>one</item>
        <item>two</item>
    </string-array>
</resources>

原始文件是一个更大的数组。这是我的代码:

builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(new FileInputStream("descripciones.xml"));
Element rootElement = document.getDocumentElement();
NodeList nl = rootElement.getElementsByTagName("string-array");

Element nl1 =(Element) nl.item(0);
NodeList nl2=nl1.getChildNodes();

for(int i=0; i<nl2.getLength();i++){
    String text=nl2.item(i).getTextContent();
    System.out.println(i+text);
}

问题是当我打印结果时,我得到每一行我得到一个空项目:

1 one
2
3 two
4

有没有办法解决它?有没有更好的方法来提取标签之间的数据?

4

3 回答 3

2

您正在处理 的所有子节点string-array,包括节点之前和之后的文本item节点。尝试

int pos = 0;
for(int i=0; i<nl2.getLength();i++){
    Node n = nl2.item(i);
    if (n.getNodeType() == Node.ELEMENT_NODE)
    {
        pos++;
        String text=n.getTextContent();
        System.out.println(pos + text);
    }
}

这将跳过string-array.

于 2012-09-18T23:57:10.443 回答
0

你需要在 getTextContent() 上做一个 trim() 例如

String text=nl2.item(i).getTextContent().trim();
于 2012-09-18T22:38:59.560 回答
0
for (int i = 0; i < nl2.getLength(); i++) {
     Node nt = nl2.item(i);
     if (nt.getFirstChild() != null) {
         String text = nt.getFirstChild().getNodeValue();
         System.out.println(text);
     }
}
于 2017-01-25T09:58:08.923 回答