Java 使用<;从xml获取元素文本内容;中断>;使用DOM

Java 使用<;从xml获取元素文本内容;中断>;使用DOM,java,xml,dom,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 Equi

我从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>

2000;将军;所有设备
2001;一般;所有设备
2002;一般;所有设备
2003;一般;所有设备
001
不知道
smth
目前,我使用以下代码:

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);
        }
documentdoc1=dBuilder.parse(fXmlFile1);
doc1.getDocumentElement().normalize();
NodeList kList1=doc1.getElementsByTagName(“项”);

对于(int temp=0;temp在
处拆分文本内容,并将每个拆分的元素添加到
数组列表中,这样可以解决您的问题

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);
        }
    }
}

键入此代码时,会生成以下字符串=“2000;常规;所有设备2001;常规;所有设备2002;常规;所有设备2003;常规;所有设备”-字符串中没有标记,这就是我无法拆分它的原因。您是否尝试过首先访问
节点的子节点?我想到了,但可能是我做错了什么,因为它对我不起作用。@Naren nope,我需要代码示例如何执行此操作。该xml文件将仅采用该格式…还是会在这种情况下更改格式..表示间距和格式..告诉me@Narenxml格式将保持不变,但不能有4个元素,而是10:“2001;常规;所有设备2002;常规;所有设备2001;常规;所有设备2002;常规;所有设备2001;常规;所有设备2002;常规;所有设备2001;常规;所有设备2001;常规;所有设备2002;常规;所有设备”我已经试过了,但仍然有相同的问题sa[0]=“2000;通用;所有设备2001;通用;所有设备2002;通用;所有设备2003;通用;所有设备”。可能是因为这不是我拥有的第一个元素。我有以下xml顺序:*问题中示例的所有内容*请使用精确的xml更新您的问题,以便为您提供完美的xmlanswer@Donvino有了上面的程序,我只得到了你想要的输出。有了你的更新xml,这很奇怪…我的程序没有得到当阅读@Donvino时,键入“\n”或中断或类似的msth,您得到的输出告诉我什么?
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