微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SAX 解析器不显示多个相同的标签

如何解决SAX 解析器不显示多个相同的标签

之前我可以显示一个标签的数据,但这次显示的不是几个值,而是一个

这是我的解析器代码

[2021-04-27 11:44:50,009] {base_aws.py:368} INFO - Airflow Connection: aws_conn_id=s3_default
[2021-04-27 11:44:50,013] {base_aws.py:170} INFO - Credentials retrieved from extra_config
[2021-04-27 11:44:50,013] {base_aws.py:84} INFO - Creating session with aws_access_key_id=<MY_ACCESS_KEY> region_name=None
[2021-04-27 11:44:50,027] {base_aws.py:157} INFO - role_arn is None
[2021-04-27 11:44:50,661] {taskinstance.py:1185} INFO - Marking task as SUCCESS. dag_id=two_step,task_id=list_files_in_bucket,execution_date=20210427T184422,start_date=20210427T184439,end_date=20210427T184450
[2021-04-27 11:44:50,676] {taskinstance.py:1246} INFO - 0 downstream tasks scheduled from follow-on schedule check
[2021-04-27 11:44:50,700] {local_task_job.py:146} INFO - Task exited with return code 0

类项目:

public class Runner {

public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {

    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser saxParser = spf.newSAXParser();
    XMLReader xmlReader = saxParser.getXMLReader();
    MyHandler handler = new MyHandler();
    xmlReader.setContentHandler(handler);

    xmlReader.parse("src/countries.xml");
    Countries branches = handler.getBranches();

    try (FileWriter files = new FileWriter("src/diploma/SAX.txt")) {
        files.write("Item " + "\n" + String.valueOf(branches.itemList) + "\n");
    }
}

private static class MyHandler extends DefaultHandler{
    static final String HISTORY_TAG = "history";
    static final String ITEM_TAG = "item";

    static final String NAME_ATTRIBUTE = "name";

    public Countries branches;
    public Item currentItem;
    private String currencyElement;

    Countries getBranches(){
        return branches;
    }

    public void startDocument() throws SAXException {
    }

    @Override
    public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
        currencyElement = qName;

        switch (currencyElement) {

            case HISTORY_TAG: {
                branches.itemList = new ArrayList<>();
                currentItem = new Item();
                currentItem.setHistoryName(String.valueOf(attributes.getValue(NAME_ATTRIBUTE)));
            } break;

            default: {}
        }
    }

    @Override
    public void characters(char[] ch,int start,int length) throws SAXException {
        String text = new String(ch,start,length);

        if (text.contains("<") || currencyElement == null){
            return;
        }

        switch (currencyElement) {

            case ITEM_TAG: {
                currentItem.setItem(text);
            } break;

            default: { }
        }
    }

    @Override
    public void endElement(String uri,String qName) throws SAXException{
        switch (qName) {

            case HISTORY_TAG: {
                branches.itemList.add(currentItem);
                currentItem = null;
            } break;

            default: {
            }
        }
        currencyElement = null;
    }

    public void endDocument() throws SAXException {
        System.out.println("SAX parsing is completed...");

    }
}
}

和类国家

public class Item {

private String historyName;
private String item;

public String getItem() {
    return item;
}

public void setItem(String item) {
    this.item = item;
}

public String getHistoryName() {
    return historyName;
}

public void setHistoryName(String historyName) {
    this.historyName = historyName;
}

@Override
public String toString() {
    return
            "historyName = " + historyName + "," + "\n" + "item = " + item + ",";
}
}

我对这部分有问题

public class Countries {

   public List<Item> itemList;
} 

我只显示最后一个“item”标签,其他重复的标签显示单数。我不知道错误在哪里,但我注意到在“endElement”中显示了所有值,但是作为一个元素。也许有人知道这是怎么回事?

解决方法

每次遇到 item 标签时,您都在创建一个新的 ArrayList。 这就是为什么您在解析后只看到一项显示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?