如何通过迭代器Java在XML文件中进行迭代?
我有这个XML文件的内容。我需要用Java中的迭代器在XML文件中进行迭代。我不想通过循环或其他方式进行迭代。仅通过迭代器。您能告诉我如何用迭代器迭代XML文件吗?我可以读取XML文件(如文本文件)还是必须通过DOM解析文件 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 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等更现代的替代品。我必须使用迭代器,因为我在研究中得到的练习完全同意,但不是真正的答案,是吗?它以什么方式不是答案?如果用户要解决以完全错误的方式回答他们的问题,然后告诉他们正确的方式是唯一可以接受的回答方式。