读取整个XML行并将其保存到数组中? JDOM

时间:2013-04-17 08:47:08

标签: java xml jdom

我有一个非常简单的问题,但我无法解决它,我希望你能帮助我。

如何使用JDOM读取整行XML文件?我需要Tag和属性,并希望将其保存在一个数组中。我怎么能这样做?

    package converter;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.JOptionPane;

import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;

import org.jdom2.Document;
import org.jdom2.input.*;
import org.jdom2.output.*;

public class Converter {

    public List<Entry> xmlconvert(String pfad, String pfad2, String bitmask){
        List<Entry> entry = new ArrayList<Entry>();
        List<Entry> wrongEntries = new ArrayList<Entry>();
        String wrongEntryIndexes = "";

        String[] languages = {"en", "pt", "it", "fr", "es", "de", "zh"};

        try{


        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(pfad);

        JOptionPane.showMessageDialog(null, "Converting successful.");
        return entry;

正如您所看到的,它只是一个开头&gt;。&lt;

对于CSV文件,我这样做了:

public List<Entry> convert(String pfad, String pfad2, String bitmask) {

    List<Entry> entry = new ArrayList<Entry>();
    List<Entry> wrongEntries = new ArrayList<Entry>();
    String wrongEntryIndexes = "";

    String[] languages = {"en", "pt", "it", "fr", "es", "de", "zh"};

    try {

        CSVReader reader = new CSVReader(new FileReader(pfad), ';', '\"', 1);

        String [] nextLine;

        while ((nextLine = reader.readNext()) != null) {
            Entry entryi = new Entry();
            entryi = new Entry();
            entryi.termEntryID = nextLine[0];
            entryi.termEntryUUID = nextLine[1];
            entryi.termID = nextLine[2];
            entryi.termUUID = nextLine[3];
            entryi.term = nextLine[4];
            entryi.status = nextLine[5];
            entryi.language = nextLine[6];
            entryi.domains = nextLine[7];
            entryi.morphosyntacticRestriction = nextLine[8];
            entryi.variantsConfiguration = nextLine[9];
            entryi.isHeadTerm = nextLine[10];
            entryi.checkInflections = nextLine[11];
            entryi.frequency = nextLine[12];
            entryi.createdBy = nextLine[13];
            entryi.createdOn = nextLine[14];
            entryi.changedBy = nextLine[15];
            entryi.changedOn = nextLine[16];
            entryi.context = nextLine[17];
            entryi.crossReference = nextLine[18];
            entryi.definitionDE = nextLine[19];
            entryi.definitionEN = nextLine[20];
            entryi.example = nextLine[21];
            entryi.externalCrossReference = nextLine[22];
            entryi.gender = nextLine[23];
            entryi.geographicalUsage = nextLine[24];
            entryi.imageURL = nextLine[25];
            entryi.note = nextLine[26];
            entryi.numerus = nextLine[27];
            entryi.partOfSpeech = nextLine[28];
            entryi.processStatus = nextLine[29];
            entryi.sourceOfDefinition = nextLine[30];
            entryi.sourceOfTerm = nextLine[31];
            entryi.termType = nextLine[32];
            entry.add(entryi);
        }

但是对于CSV文件,可以在同一结构中再次编写它。我将所有变量保存在不同的数组中,然后检查它们。

2 个答案:

答案 0 :(得分:1)

如果你谈论XML,你不应该谈论行,只有开始和结束标记很重要。除了人类的可读性之外,行在XML中没有意义。如果您有想要的Element - 实例,则可以拨打getName()getAttributes()来收集所有信息。然后,您可以将它们推送到任何类型的List,然后将其转换为String[]

然而,这确实没有多大意义,因为XML通常具有树结构,并且您试图将其强制为扁平结构。此外,如果您希望平面结构查看MapSet,则可以将密钥(元素或属性的名称)和值保存为一对。

可能有一些XML示例显示了您的文件的gernal架构以及您目前使用的用于读取XML的代码。

答案 1 :(得分:1)

如果不了解XML的结构很难说,但根据您的评论,我猜你有类似的东西:

<parentElement>
    <childElement>
        <attr1>XXX</attr1>
        ....
    </childElement>
   ... more childElements
</parentElement>

您已经拥有了Document,因此您需要遍历childElement标记。为此:

Element root = doc.getRootElement();
List<Element> childElements = root.getChildren("childElement");

只需遍历childElements