, поэтому я начал работать с xml и парсером SAX, и теперь я пытаюсь выяснить, как это работает, я знаком с JSON, но, похоже, он не работает как JSON.Итак, вот код, с которым я работаю
package com.myalbion.gamedataextractor.handlers;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.myalbion.gamedataextractor.Main;
import com.myalbion.gamedataextractor.datatables.Language;
import com.myalbion.gamedataextractor.datatables.Localized;
import com.myalbion.gamedataextractor.datatables.XMLFile;
public class LocalizationXMLFileHandler extends DefaultHandler {
private String temp;
Localized localized;
List<Localized> localizedList;
Map<Language, String> tempMap;
/*
* When the parser encounters plain text (not XML elements),
* it calls(this method, which accumulates them in a string buffer
*/
public void characters(char[] buffer, int start, int length) {
temp = new String(buffer, start, length);
}
/*
* Every time the parser encounters the beginning of a new element,
* it calls this method, which resets the string buffer
*/
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
temp = "";
if (qName.equalsIgnoreCase("tu")) {
localized = new Localized();
localized.setUniqueName(attributes.getValue("tuid"));
} else if(qName.equalsIgnoreCase("tuv")) {
tempMap.put(Language.getLanguageFromCode(attributes.getValue("xml:lang")), )
}
}
/*
* When the parser encounters the end of an element, it calls this method
*/
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("tu")) {
// add it to the list
accList.add(acct);
} else if (qName.equalsIgnoreCase("Name")) {
acct.setName(temp);
} else if (qName.equalsIgnoreCase("Id")) {
acct.setId(Integer.parseInt(temp));
} else if (qName.equalsIgnoreCase("Amt")) {
acct.setAmt(Integer.parseInt(temp));
}
}
}
, и я пытаюсь извлечь данные из этого XML-файла в tempMap, который содержит перечисление Language и локализованное имя.
<?xml version="1.0"?>
<tmx version="1.4">
<body>
<tu tuid="@ACCESS_RIGHTS_ACCESS_MODE">
<tuv xml:lang="EN-US">
<seg>Access Mode</seg>
</tuv>
<tuv xml:lang="DE-DE">
<seg>Zugriffsmodus</seg>
</tuv>
<tuv xml:lang="FR-FR">
<seg>Mode d'accès</seg>
</tuv>
<tuv xml:lang="RU-RU">
<seg>Доступ</seg>
</tuv>
<tuv xml:lang="PL-PL">
<seg>Tryb dostępu</seg>
</tuv>
<tuv xml:lang="ES-ES">
<seg>Modo de acceso</seg>
</tuv>
<tuv xml:lang="PT-BR">
<seg>Modo de acesso</seg>
</tuv>
<tuv xml:lang="ZH-CN">
<seg>权限模式</seg>
</tuv>
<tuv xml:lang="KO-KR">
<seg>접근 모드</seg>
</tuv>
</tu>
</body>
</tmx>
Теперь в строке 49 кода Java я получаю код языка из атрибута tuv, но мне не хватает локализованного имени, которое находится ниже tuv, называемого seg of, может получить атрибут parent и получить значение seg в той же строке