Получить элемент «текст», ища его идентификатор в XML (Stringtable для игр), используя StaX - PullRequest
1 голос
/ 04 октября 2019

Пока у меня есть способ ВЫБРАТЬ элемент, который я хочу, по его идентификатору, но я пытался и не могу получить способ получить его содержимое (сообщение).

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!"

...