我有一个非常简单的问题,但我无法解决它,我希望你能帮助我。
如何使用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文件,可以在同一结构中再次编写它。我将所有变量保存在不同的数组中,然后检查它们。
答案 0 :(得分:1)
如果你谈论XML,你不应该谈论行,只有开始和结束标记很重要。除了人类的可读性之外,行在XML中没有意义。如果您有想要的Element
- 实例,则可以拨打getName()
和getAttributes()
来收集所有信息。然后,您可以将它们推送到任何类型的List
,然后将其转换为String[]
。
然而,这确实没有多大意义,因为XML通常具有树结构,并且您试图将其强制为扁平结构。此外,如果您希望平面结构查看Map
或Set
,则可以将密钥(元素或属性的名称)和值保存为一对。
可能有一些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