如何通过迭代器Java在XML文件中进行迭代?

如何通过迭代器Java在XML文件中进行迭代?,java,xml,parsing,iterator,Java,Xml,Parsing,Iterator,我有这个XML文件的内容。我需要用Java中的迭代器在XML文件中进行迭代。我不想通过循环或其他方式进行迭代。仅通过迭代器。您能告诉我如何用迭代器迭代XML文件吗?我可以读取XML文件(如文本文件)还是必须通过DOM解析文件 XML文件 <?xml version="1.0" encoding="utf-8"?> <Rules> <Rule id="damaged"> <Question>Do you want to accidents

我有这个XML文件的内容。我需要用Java中的迭代器在XML文件中进行迭代。我不想通过循环或其他方式进行迭代。仅通过迭代器。您能告诉我如何用迭代器迭代XML文件吗?我可以读取XML文件(如文本文件)还是必须通过DOM解析文件

XML文件

 <?xml version="1.0" encoding="utf-8"?>
<Rules>

<Rule id="damaged">
    <Question>Do you want to accidents car?</Question>
    <Answer>
        <Selection value="true">
            <SingleValue value="yes"/>
        </Selection>
        <Selection value="false">
            <SingleValue value="no"/>
        </Selection>
    </Answer>
</Rule>

<Rule id="family">
    <Question>Do you want to family car?</Question>
    <Answer>
        <Selection value="true">
            <MultipleValue value="yes"/>
        </Selection>
        <Selection value="false">
            <MultipleValue value="no"/>
        </Selection>
    </Answer>
</Rule>

<Rule id="money">
    <Question>Do you have 200.000 PLN for a car?</Question>
    <Answer>
        <Selection value="true">
            <SingleValue value="yes"/>
        </Selection>
        <Selection value="false">
            <SingleValue value="no"/>
        </Selection>
    </Answer>
</Rule>

<Rule id="drivingGear">
    <Question>Do you have front-wheel drive?</Question>
    <Answer>
        <Selection value="true">
            <MultipleValue value="on the front wheels"/>
        </Selection>
        <Selection value="false">
            <MultipleValue value="on the rear wheels"/>
        </Selection>
    </Answer>
</Rule>

<Rule id="gearBox">
    <Question>Do you want to automatic gearbox?</Question>
    <Answer>
        <Selection value="true">
            <SingleValue value="automatic"/>
        </Selection>
        <Selection value="false">
            <SingleValue value="manual"/>
        </Selection>
    </Answer>
</Rule>


<Rule id="comfort">
    <Question>What is more important for you?</Question>
    <Answer>
        <Selection value="true">
            <SingleValue value="comfort"/>
        </Selection>
        <Selection value="false">
            <SingleValue value="speed"/>
        </Selection>
    </Answer>
</Rule>
...
<Rule id="luxury">
    <Question>What feature is must-have for you?</Question>
    <Answer>
        <Selection value="true">
            <MultipleValue value="gps,bluetooth,dvd,automatic transmission,self-driving"/>
        </Selection>
        <Selection value="false">
            <MultipleValue value="nothing,abs,fog lights,central lock"/>
        </Selection>
    </Answer>
</Rule>

你想开车吗?
你想买家用汽车吗?
一辆车有20万印尼盾吗?
你们有前轮驱动吗?
你想要自动变速箱吗?
什么对你更重要?
...
您必须具备的功能是什么?

这是我写的代码

public class Question{

private List<String> splittedXML;

public Question(){
    this.splittedXML = new ArrayList<>();
}

public List<String> getSplittedXML(){
    return this.splittedXML;
}

public Iterator<String> QuestionIterator(){
    try (BufferedReader br = new BufferedReader(new FileReader("/home/hubert/Pulpit/expert-system-hubert/Rules.xml"))) {

        String line;

        while ((line = br.readLine()) != null) {
            String[] splittedTextXMLFile = line.split("\n");


            for(String singleLine: splittedTextXMLFile){
                if(singleLine.equals("Question")){
                    splittedXML.add(singleLine.substring(singleLine.indexOf(">") + 1, singleLine.indexOf("<")));
                }
            }

        }
        Iterator<String> itr = splittedXML.iterator();

        while(itr.hasNext()){
            return itr;
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
}
公开课问题{
私有列表拆分XML;
公众问题({
this.splittedXML=new ArrayList();
}
公共列表getSplittedXML(){
返回this.splittedXML;
}
公共迭代器QuestionIterator(){
try(BufferedReader br=new BufferedReader(new FileReader(“/home/hubert/Pulpit/expert system hubert/Rules.xml”)){
弦线;
而((line=br.readLine())!=null){
String[]splittedTextXMLFile=line.split(“\n”);
for(字符串单行:splittedTextXMLFile){
if(单线等于(“问题”)){

splittedXML.add(singleLine.substring(singleLine.indexOf(“>”)+1,singleLine.indexOf(“代码中存在一些问题,主要是:

while ((line = br.readLine()) != null) {
     String[] splittedTextXMLFile = line.split("\n");
br.readLine()
将为您提供一行文本。无论结果如何,按新行分母拆分它:
\n
都不会有任何区别,因此,
拆分的TextXmlFile
将只包含一个元素,即

因此,
if(singleLine.equals(“问题”){
将失败,因为至少您应该查找
->
singleLine.ToLower().contains(“”

也就是说,您可能想看看教程,让您从正确的方向开始


至于最后一点,迭代器通常与
一起使用,而
循环最终会转化为迭代器实现。

您不应该试图通过将XML作为文本读取来处理它,您应该始终使用XML解析器。否则,您将依赖于XML的意外特性,这些特性在将来很容易更改ure,例如,如果发送方决定通过关闭缩进来提高性能


您应该通过将该文件解析为内存中的树结构来处理该文件:要么是旧而笨拙的DOM,要么是JDOM2或XOM等更现代的替代品。

我必须使用迭代器,因为我在研究中得到的练习完全同意,但不是真正的答案,是吗?它以什么方式不是答案?如果用户要解决以完全错误的方式回答他们的问题,然后告诉他们正确的方式是唯一可以接受的回答方式。