java - 使用 DOM 通过 <break> 从 xml 获取元素文本内容

标签 java xml dom

我有 xml 文件的以下部分:

<database>
<document form='Record'>
<item name='SystemsList'><text>2000;Generl;All equipment<break/>
2001;General;All equipment<break/>
2002;General;All equipment<break/>
2003;General;All Equipment</text></item>
<item name='RmNumber'><text>001</text></item>
<item name='Reason'><text>Don't know</text></item>
<item name='Something'><text>smth</text></item>
</document>
</database>

现在我使用以下代码:

Document doc1 = dBuilder.parse(fXmlFile1);
            doc1.getDocumentElement().normalize();
            NodeList kList1 =doc1.getElementsByTagName("item");
            for(int temp=0;temp<kList1.getLength();temp++)
            {
                Node kNode1=kList1.item(temp);
                //System.out.println("\nCurrent Element :" + kNode.getNodeName());
                if (kNode1.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) kNode1;
            //System.out.println("node name"+eElement.getNodeName());
            Node in=eElement.getFirstChild();
            //System.out.println("__________________"+in.getFirstChild().getTextContent());

            //System.out.println("IN text content----:"+in.getTextContent()+":--------");
            if(eElement.getAttribute("name").equals("SystemsList")==true)
            {            
                NodeList kList2=in.getChildNodes();
                //if((in.getTextContent()!=null)&&!(in.getTextContent()).isEmpty()&& !(in.getTextContent().length()==0))
                //{
                for(int k=0;k<kList2.getLength();k++)
                {
                    Node kNode2 = kList2.item(k);
                    if((kNode2.getTextContent()!=null)&&!(kNode2.getTextContent()).isEmpty()&& !(kNode2.getTextContent().length()==0))
                        stringBuilder.append(kNode2.getTextContent()+"\n");
                }
                //}
            }
        }
            }
String s=new String(stringBuilder);
        String sa[]=s.split("\n");
        System.out.println("size"+sa.length);
        for(String st:sa)
        {
         System.out.println(st);
        }

此代码生成以下 String="2000;General;All Equipment2001;General;All Equipment2002;General;All Equipment2003;General;All Equipment"

问题是我如何得到这个带有中断的 xml 部分为 ArrayList,其中每个元素是上面 xml 中的 1 行,或者只是为了创建一个字符串数组,f/e:SystemsListByYear[0]="2000 ;Generl;所有装备"、SystemsListByYear[1]="2001;Generl;所有装备"

附注我使用 DOM 库。

已编辑问题以更正 编辑部分:

if (kNode1.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) kNode1;
                //System.out.println("node name"+eElement.getNodeName());
                Node in=eElement.getFirstChild();
                //System.out.println("__________________"+in.getFirstChild().getTextContent());

                //System.out.println("IN text content----:"+in.getTextContent()+":--------");
                if(eElement.getAttribute("name").equals("SystemsList")==true)
                {            
                    NodeList kList2=in.getChildNodes();
                    //if((in.getTextContent()!=null)&&!(in.getTextContent()).isEmpty()&& !(in.getTextContent().length()==0))
                    //{
                    for(int k=0;k<kList2.getLength();k++)
                    {
                        Node kNode2 = kList2.item(k);
                        if((kNode2.getTextContent()!=null)&&!(kNode2.getTextContent()).isEmpty()&& !(kNode2.getTextContent().length()==0))
                            stringBuilder.append(kNode2.getTextContent()+"\n");
                    }
                    //}
                }
            }

最佳答案

那么这将解决您的问题

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Test {
    public static void main(String args[]) throws Exception {
        FileInputStream fileInputStream = new FileInputStream(new File(
                "src/file.xml"));
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document doc1 = builder.parse(fileInputStream);
        doc1.getDocumentElement().normalize();
        NodeList kList1 = doc1.getElementsByTagName("item");
        List<String> alist=new ArrayList<String>();
        StringBuilder stringBuilder=new StringBuilder();
        String SystemsListByYear;
        for (int temp = 0; temp < kList1.getLength(); temp++) {
            Node kNode1 = kList1.item(temp);
             System.out.println("\nCurrent Element :" + kNode1.getNodeName());
            if (kNode1.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) kNode1;
                System.out.println("node name"+eElement.getNodeName());
                Node in=eElement.getFirstChild();
                if((in.getTextContent()!=null)&&!(in.getTextContent()).isEmpty()&& !(in.getTextContent().length()==0))
                stringBuilder.append(in.getTextContent());
                }
        }
        String s=new String(stringBuilder);
        String sa[]=s.split("\n");
        System.out.println("size"+sa.length);
        for(String st:sa)
        {
         System.out.println(st);
        }
    }
}

输出

node nameitem
size4
2000;Generl;All equipment
2001;General;All equipment
2002;General;All equipment
2003;General;All Equipment

关于java - 使用 DOM 通过 <break> 从 xml 获取元素文本内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041082/

相关文章:

java - 何时何地在 spring-boot 应用程序中应用日志记录

node.js - 使用 Webpack 导入 zip 文件并获取其中的各个文件

python - 有没有关于基于 XML 的 API、REST、SOAP with Python 的好书和/或教程?

c# - 将字符串转换为 xml 节点

PHP 检查它是否是一个有效的 HTML 属性

javascript - 为什么编译器说 getElementByClass 不存在?

java - 仅在 Struts 1.x 中将 HTTP 请求限制为 'POST'

java - JLabel 中的可点击词

javascript - 我怎样才能把盒子移到拐 Angular 处

java - android 背景颜色 xml 标签在 android studio 中不起作用