1

非常に単純な質問がありますが、解決できません。助けていただければ幸いです。

JDOM で XML ファイルの行全体を読み取るにはどうすればよいですか? タグと属性が必要で、それを 1 つの配列に保存したいと考えています。これどうやってするの?

    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;

ご覧のとおり、それは始まりに過ぎません >.<

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ファイルの場合、同じ構造で書き直すのは簡単です。すべての変数を異なる配列に保存してから、それらをチェックします。

4

2 に答える 2

1

XML について話す場合は、行について話すべきではありません。重要なのは開始タグと終了タグだけです。XML では、人間の可読性を除けば、行に意味はありません。必要なインスタンスを取得した場合は、Element電話getName()getAttributes()てすべての情報を収集できます。次に、それらを任意の種類にプッシュしListて、その後に変換できString[]ます。

ただし、これはあまり意味がありません。一般に XML はツリー構造を持ち、それをフラット構造に強制しようとしているためです。Mapさらに、 aまたは aを見てフラットな構造が必要な場合Setは、キー (要素または属性の名前) と値を 1 つのペアとして保存できます。

おそらく、ファイルの一般的なスキーマを示す XML の例と、XML を読み取るためにこれまでに使用したコードが役立つでしょう。

于 2013-04-17T09:05:34.923 に答える