これは私にとってさえ愚かな質問のようですが、答えが見つからないものの1つです。STaxを使用したJavaでのXMLの解析
イムこのようなルックスを解析しようとしているJavaでSTAXを使用してXMLとXMLイムを解析しよう -
<?xml version="1.0" encoding="UTF-8"?>
<Macros>
<MacroDefinition>
<MacroName>
<string>Macro1</string>
</MacroName>
</MacroDefinition>
</Macros>
次のように今私は、マクロのクラスを持っている -
public class Macro {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
私はまた、私は 'マクロ'クラスのオブジェクトにXMLを変換しようとするパーサークラスがあります。次のようにパーサクラスのスニペットがある -
public class StaxParser {
static final String MACRODEFINITION = "MacroDefinition";
static final String MACRONAME = "MacroName";
static final String STRING = "string";
@SuppressWarnings({ "unchecked", "null" })
public List<Item> readMacro(String configFile) {
List<Macro> macroList = new ArrayList<Macro>();
try {
// First create a new XMLInputFactory
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
// Setup a new eventReader
InputStream in = new FileInputStream(configFile);
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
// Read the XML document
Macro macro = null;
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
StartElement startElement = event.asStartElement();
if (startElement.getName().getLocalPart() == (MACRODEFINITION)) {
macro = new Macro();
}
if (event.isStartElement()) {
if (event.asStartElement().getName().getLocalPart()
.equals(MACRONAME)) {
Iterator<Attribute> attributes = event
.asStartElement().getAttributes();
while (attributes.hasNext()) {
Attribute attribute = attributes.next();
if (attribute.getName().toString()
.equals(STRING)) {
macro.setMacroName(event.asCharacters()
.getData());
}
}
event = eventReader.nextEvent();
continue;
}
}
}
// If we reach the end of an item element we add it to the list
if (event.isEndElement()) {
EndElement endElement = event.asEndElement();
if (endElement.getName().getLocalPart() == (MACRODEFINITION)) {
macroList.add(macro);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
return macroList;
}
}
直面する問題のイムは、パーサが「MACRONAME」の子ノードを読み取ることができないということです。私が考えているのはgetAttributes
なので、動作しないのですが、特定のノードの子ノードを取得するためにどのメソッドを呼び出すべきかを知ることはできません。
これに関するお手伝いがあれば幸いです。
おかげ
p1nG
私は認めなければなりません。あなたがこのコードスニペットで何をしているのかを理解するのにはしばらく時間がかかりましたが、StAXでxmlを解析するためにこれまで見たことのない最良の方法です! – Nerrve