我有这个XML文件的内容。我需要在Java中迭代Iterator的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>
这是我写的代码。
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;
}
}发布于 2018-09-27 15:48:33
永远不要试图以文本的形式读取XML,而应该始终使用XML解析器。否则,您将依赖XML的意外特性,这些特性可能在将来很容易更改,例如,如果发送方决定通过关闭缩进来提高性能。
您应该通过将文件解析为内存中的树结构来处理该文件:旧的和笨拙的DOM,或者更现代的选项之一,如JDOM2或XOM。
发布于 2018-09-27 15:26:10
您的代码存在一些问题,主要如下:
while ((line = br.readLine()) != null) {
String[] splittedTextXMLFile = line.split("\n");br.readLine(),会给你一行文字。不管结果如何,将其除以新的行分母:\n不会有任何区别,因此,splittedTextXMLfile将只包含一个元素,即line。
其结果是:if(singleLine.equals("Question")){将失败,因为至少您应该寻找<Question> -> singleLine.ToLower().contains("<question>")。
尽管如此,您可能需要查看这教程,以使您从正确的方向开始。
至于最后一点,迭代器通常与while循环一起使用,循环最终转化为迭代器实现。
https://stackoverflow.com/questions/52540203
复制相似问题