Я создаю игровой менеджер парового клона на Java, и у меня возникают проблемы с одной заключительной частью проекта. В левой части графического интерфейса я автоматически заполнял «плейлисты» игр, которые анализируются из XML-файла библиотеки, и я хотел бы получить игры только из этого плейлиста, когда нажимает на ListSelectionListener. В настоящее время я могу заполнять ВСЕ игры, хранящиеся в библиотеке, используя getElementsByTagName («Игра»), но мне нужно, чтобы они были конкретными для списка воспроизведения, которому также присваивается уникальный идентификатор с атрибутом attribute, установленным в true для «Id».XML-анализ - получение узлов только от родителя с определенным идентификатором
Однако в приведенном ниже коде мне нужно сделать что-то вроде readLib.getElementById (id) .getChildNodes(); но каждый раз, когда я делаю это, я получаю исключение nullpointer в этой строке. Есть идеи? Я чувствую, что я очень близко.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); String [] gameArray = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document readLib = builder.parse(LIBRARY_FILE_PATH);
System.out.println("ID:" + id);
NodeList gameNodes = readLib.getElementsByTagName("Game");
gameArray = new String[gameNodes.getLength()];
for (int i = 0; i < gameNodes.getLength(); i++) {
Node p = gameNodes.item(i);
if (p.getNodeType() == Node.ELEMENT_NODE) {
Element Game = (Element) p;
String gameNames = Game.getAttribute("Name");
gameArray[i] = gameNames;
}
}
} catch (ParserConfigurationException e) {
LogToFile.writeFile("[GM-Logging] Parser configuratoin exception when generating game list");
} catch (SAXException e) {
LogToFile.writeFile("[GM-Logging] General SAXException in generateGames() method");
} catch (IOException e) {
LogToFile.writeFile("[GM-Logging] IOException while generating game names in Library Manager engine");
}
Это пример того, что библиотека XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Library>
<Playlist Id="0" list="First Person Shooters">
<Game Name="Counter-Strike: Source">
<Path>C:\\Program Files\\Games\\CSS\cstrike.exe</Path>
<Executable>cstrike.exe</Executable>
</Game>
<Game Name="Counter-Strike: Global Offense">
<Path>C:\\Program Files\\Games\\CSGO\csgo.exe</Path>
<Executable>csgo.exe</Executable>
</Game>
<Game Name="Crysis 3">
<Path>C:\\Program Files\\Games\\Crytek\crysislauncher.exe</Path>
<Executable>crysislauncher.exe</Executable>
</Game>
</Playlist>
<Playlist Id="1" list="Grand Theft Auto Series">
<Game Name="Grand Theft Auto V">
<Path>C:\\Program Files\\Games\\Rockstar\gtav.exe</Path>
<Executable>gtav.exe</Executable>
</Game>
<Game Name="Grand Theft Auto IV: Ballad of Gay Tony">
<Path>C:\\Program Files\\Games\\Rockstar\gtaiv\gtaiv.exe</Path>
<Executable>gtaiv.exe</Executable>
</Game>
</Playlist>
<Playlist Id="2" list="Survival and Horror Games"></Playlist>
Что версия Java вы используете, попробуйте использовать javax .xml.bind.JAXBContext, он будет анализировать создание объектов для вас –
Java SE 8 Update 45, но я не совсем уверен, что вы имеете в виду – Nati0n