简体   繁体   English

用Java读取XML文件内容

[英]Reading XML file content in Java

Can you tell me best way to read an XML file in Java with sample code? 您能告诉我使用示例代码在Java中读取XML文件的最佳方法吗? XML content be like below. XML内容如下所示。

<table sourceName="person" targetName="person">
       <column sourceName="id" targetName="id"/>
       <column sourceName="name" targetName="name"/>``
</table>

I would use JAXB, try this, it works 我会使用JAXB,尝试这个,它的工作原理

public class Test1 {
    @XmlAttribute
    String sourceName;
    @XmlAttribute
    String targetName;
    @XmlElement(name = "column")
    List<Test1> columns;

    public static Test1 unmarshal(File file) {
        return JAXB.unmarshal(file, Test1.class);
    }
}

You could use Simple form simple XML serialization: 您可以使用Simple form简单的XML序列化:

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

public class App {

    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                + "<table sourceName=\"person\" targetName=\"person\">\n"
                + "    <column sourceName=\"id\" targetName=\"id\"/>\n"
                + "    <column sourceName=\"name\" targetName=\"name\"/>``\n"
                + "</table>";
        Serializer serializer = new Persister();
        Table table = serializer.read(Table.class, xml);
        System.out.println(table.getSourceName());
        System.out.println(table.getTargetName());
        for (Column colunmn : table.getColumns()) {
            System.out.println(colunmn.getSourceName());
            System.out.println(colunmn.getTargetName());
        }
    }
}

Table : Table

import java.util.List;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root(name = "table")
public class Table {

    @Attribute
    private String sourceName;
    @Attribute
    private String targetName;
    @ElementList(name = "column", inline = true)
    private List<Column> columns;

    public Table() {
    }

    public String getSourceName() {
        return sourceName;
    }

    public void setSourceName(String sourceName) {
        this.sourceName = sourceName;
    }

    public String getTargetName() {
        return targetName;
    }

    public void setTargetName(String targetName) {
        this.targetName = targetName;
    }

    public List<Column> getColumns() {
        return columns;
    }

    public void setColumns(List<Column> columns) {
        this.columns = columns;
    }
}

Column : Column

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;

@Root(name = "column")
public class Column {

    @Attribute
    private String sourceName;
    @Attribute
    private String targetName;

    public Column() {
    }

    public String getSourceName() {
        return sourceName;
    }

    public void setSourceName(String sourceName) {
        this.sourceName = sourceName;
    }

    public String getTargetName() {
        return targetName;
    }

    public void setTargetName(String targetName) {
        this.targetName = targetName;
    }
}

Since it's a very small XML file, I would use DOM parsing, you can find a full example here: 由于它是一个非常小的XML文件,我会使用DOM解析,你可以在这里找到一个完整的例子:

http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/ http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

But in essence: 但实质上:

File fXmlFile = new File("/Users/mkyong/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);

NodeList nList = doc.getElementsByTagName("table");

for (int temp = 0; temp < nList.getLength(); temp++) {
    Node tableNode = nList.item(temp);
    Element tableElement = (Element) tableNode;

    System.out.println("Table source name: " + tableElement.getAttribute("sourceName"));
    System.out.println("Table target name: " + tableElement.getAttribute("targetName"));

    NodeList columnList = tableElement.getElementsByTagName("column");
    for (int j = 0; j < columnList.getLength(); j++) {
        Node columnNode = columnList.item(j);
        Element columnElement = (Element) columnNode;

        System.out.println("Column source name: " + columnElement.getAttribute("sourceName"));
        System.out.println("Column target name: " + columnElement.getAttribute("targetName"));


    }
}

Please see the relevant imports at the top of the example. 请参阅示例顶部的相关导入。

Hope it helps, A. 希望它有所帮助,A。

Books have been written on the subject, and it all depends. 已经就这个主题写了书,这一切都取决于。 JAXB is a good choice if the structure of the file is simple and stable (it maps elements/attributes to Java classes, and you don't want to be changing and recompiling your Java classes three times a week). 如果文件的结构简单而稳定(它将元素/属性映射到Java类,并且您不希望每周更改和重新编译Java类三次),则JAXB是一个不错的选择。

Otherwise there's a range of generic tree models - DOM is the most widely used, oldest, and worst; 否则就有一系列通用树模型 - DOM是使用最广泛,最古老和最差的模型; I would recommend JDOM2 or XOM. 我推荐JDOM2或XOM。

But the ideal is to avoid reading the data into Java at all; 但理想的是避免将数据读入Java中; the "XRX" or "end-to-end XML" principle is to use XML-oriented languages such as XSLT and XQuery for the entire application, perhaps calling into Java support routines occasionally if you really need to. “XRX”或“端到端XML”原则是为整个应用程序使用面向XML的语言,如XSLT和XQuery,如果你真的需要,可能偶尔会调用Java支持例程。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM