将XML数据文件写入文本文件

s0lus

我在一个文件夹中有几个XML文件。我想将XML数据文件写入文本文件。但是我不知道该怎么做。:(

样本XML文件:

<?xml version = "1.0"?>
<note>
<to> Mat </to>
<from> Tim </from>
<head> Black </head>
<body> Yellow </body>
</note>

这是我的代码:

public class ReadXML extends DefaultHandler {

Boolean noteTag = false;
Boolean toTag = false;
Boolean fromTag = false;
Boolean headTag = false;
Boolean bodyTag = false;

static final String NOTE = "note";
static final String TO = "to";
static final String FROM = "from";
static final String HEAD = "head";
static final String BODY = "body";

public void read() throws Exception {

    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();

    File folder = new File("D:\\Source Code\\NetBeans\\Java\\BGPU\\ParseXMLFile");
    File[] listOfFiles = folder.listFiles();

    for (File file : listOfFiles) {
        if (file.isFile() && file.getName().endsWith(".xml")) {
            saxParser.parse(file, this);
            System.out.println();
        }
    }
}

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

    if (qName.equalsIgnoreCase(NOTE)) {
        noteTag = true;
    }

    if (qName.equalsIgnoreCase(TO)) {
        toTag = true;
    }

    if (qName.equalsIgnoreCase(FROM)) {
        fromTag = true;
    }

    if (qName.equalsIgnoreCase(HEAD)) {
        headTag = true;
    }

    if (qName.equalsIgnoreCase(BODY)) {
        bodyTag = true;
    }
}

@Override
public void characters(char ch[], int start, int length) throws SAXException {

    if (fromTag.equals(true)) {
        System.out.println("FROM: " + new String(ch, start, length));
        }

    if (toTag.equals(true)) {
        System.out.println("TO: " + new String(ch, start, length));
        toTag = false;
    }

    if (headTag.equals(true)) {
        System.out.println("HEAD: " + new String(ch, start, length));
        headTag = false;
    }
}

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

    if (qName.equalsIgnoreCase(NOTE)) {
        noteTag = false;
    }

    if (qName.equalsIgnoreCase(TO)) {
        toTag = false;
    }

    if (qName.equalsIgnoreCase(FROM)) {
        fromTag = false;
    }

    if (qName.equalsIgnoreCase(HEAD)) {
        headTag = false;
    }

    if (qName.equalsIgnoreCase(BODY)) {
        bodyTag = false;
    }
}

public void save(String filename) throws Exception {

}

请帮助我完成save()方法。

亚当

我建议不要使用SAX,这是一个使用XPath的示例。您可以使用java.util.FileWriter写入文件。

public class Test {
    public static void main(String[] args) throws Exception {
        BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("test.xml");
        XPathFactory xPathFactory = XPathFactory.newInstance();
        writer.append(xPathFactory.newXPath().compile("//note/to").evaluate(document));
        writer.newLine();
        writer.append(xPathFactory.newXPath().compile("//note/from").evaluate(document));
        writer.newLine();
        writer.append(xPathFactory.newXPath().compile("//note/head").evaluate(document));
        writer.newLine();
        writer.append(xPathFactory.newXPath().compile("//note/body").evaluate(document));
        writer.newLine();
        writer.close();
    }
}

如果您真的必须使用SAX,这是一种更清洁的方法

public class ReadXml {

    public static void main(String[] args) throws Exception {
        new ReadXml().read();
    }

    public void read() throws Exception {

        SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();

        File folder = new File(".");
        File[] listOfFiles = folder.listFiles();

        for (File file : listOfFiles) {
            if (file.isFile() && file.getName().endsWith(".xml")) {

                Handler handler = new Handler();
                saxParser.parse(file, handler);
                save(handler, file.getName() + ".txt");
            }
        }
    }

    private void save(Handler handler, String filename) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
        writer.append(handler.getFrom());
        writer.newLine();
        writer.append(handler.getTo());
        writer.newLine();
        writer.append(handler.getHead());
        writer.newLine();
        writer.append(handler.getBody());
        writer.newLine();
        writer.close();
    }

    private class Handler extends DefaultHandler {

        private StringBuilder content;
        private String to;
        private String from;
        private String body;
        private String head;

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

            content = new StringBuilder();
        }

        @Override
        public void characters(char ch[], int start, int length)
                throws SAXException {
            content.append(ch, start, length);
        }

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

            if ("to".equals(qName)) {
                to = content.toString();
            } else if ("from".equals(qName)) {
                from = content.toString();
            } else if ("body".equals(qName)) {
                body = content.toString();
            } else if ("head".equals(qName)) {
                head = content.toString();
            }
        }

        public String getTo() {
            return to;
        }

        public String getFrom() {
            return from;
        }

        public String getBody() {
            return body;
        }

        public String getHead() {
            return head;
        }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python将文本数据写入文本文件

来自分类Dev

以表格格式将数据写入文本文件

来自分类Dev

将Scala中生成的数据写入文本文件

来自分类Dev

从现场将数据写入本地文本文件

来自分类Dev

C#将数据写入文本文件

来自分类Dev

将数据从Excel写入文本文件

来自分类Dev

使用Processing将数据从Arduino写入文本文件

来自分类Dev

将列表写入文本文件

来自分类Dev

将结构写入文本文件

来自分类Dev

将列写入文本文件

来自分类Dev

将交易写入文本文件

来自分类Dev

将系列写入文本文件

来自分类Dev

将多维数组写入文本文件文件

来自分类Dev

将导入的.py文件的结果写入文本文件

来自分类Dev

Bash脚本,用于将文件的元数据属性写入单独的文本文件

来自分类Dev

如何仅将新文本写入文本文件

来自分类Dev

将图像文本写入新的文本文件?

来自分类Dev

从文本文件python写入文本文件

来自分类Dev

使用 java 将 Postgres 数据库收集的数据写入文本文件

来自分类Dev

从文本文件读取并将其写入XML

来自分类Dev

在文本文件中连续写入数据流

来自分类Dev

如何在php中将数据写入文本文件

来自分类Dev

快速将数据从C ++ Vector写入文本文件

来自分类Dev

使用GZipStream将文本文件写入gz文件,而无需先将文本文件写入磁盘

来自分类Dev

将命令行输出写入文本文件

来自分类Dev

将终端的动态输出写入文本文件

来自分类Dev

Java:无法将ArrayList <Long>写入文本文件

来自分类Dev

将ObservableCollection的内容写入文本文件

来自分类Dev

如何将ArrayList写入文本文件?