Пока у меня есть способ ВЫБРАТЬ элемент, который я хочу, по его идентификатору, но я пытался и не могу получить способ получить его содержимое (сообщение).
public static String GetText(String id) throws FileNotFoundException, XMLStreamException
{
File file = new File("C:/Users/LENOVO/IdeaProjects/CasinoRoyale/src/Stringtable.xml");
// Instance of the class which helps on reading tags
XMLInputFactory factory = XMLInputFactory.newInstance();
// Initializing the handler to access the tags in the XML file
XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(file));
String text = "";
// Checking the availability of the next tag
while (eventReader.hasNext()) {
XMLEvent xmlEvent = eventReader.nextEvent();
Characters characters = xmlEvent.asCharacters();
if (xmlEvent.isStartElement()) {
StartElement startElement = xmlEvent.asStartElement();
Iterator<Attribute> iterator = startElement.getAttributes();
while (iterator.hasNext()) {
Attribute attribute = iterator.next();
QName name = attribute.getName();
if ("id".equalsIgnoreCase(name.getLocalPart())) {
String currentId = String.valueOf(attribute.getValue());
if (currentId.equals(id))
text = characters.getData();
break;
}
}
}
}
return text;
}
Это метод, и он пока не дает ошибок в IDE.
<?xml version="1.0" encoding="UTF-8"?>
<Stringtable>
<GameHelper id="welcomeTo">Welcome to Casino Royale!</GameHelper>
</Stringtable>
Это мой короткий Stringtable.xml на данный момент.
System.out.println(UtilitiesGame.GetText("welcomeTo"));
Вот как я его называюи он выдает это исключение:
Исключение в потоке "main" java.lang.ClassCastException: класс com.sun.xml.internal.stream.events.StartDocumentEvent не может быть приведен к классу javax.xml. stream.events.Characters (com.sun.xml.internal.stream.events.StartDocumentEvent и javax.xml.stream.events.Characters находятся в модуле java.xml загрузчика 'bootstrap') в java.xml / com.sun. xml.internal.stream.events.DummyEvent.asCharacters (DummyEvent.java:115) в UtilitiesGame.GetText (UtilitiesGame.java:66) в GameHelper. (GameHelper.java:67) в CasinoRoyale.main (CasinoRoyale.java:7)
Что мне нужно, так это то, что при наличии идентификатора (welcomeTo) я получаю "Welcome to Casino Royale!"