YuraAAA1 13 Опубликовано 23 марта, 2014 Бывает так, что дроп описывается в npcs.xml и выкинуть ненужный дроп достаточно муторное занятие. Хочу поделиться с форумчанами одним инструментом для быстрого удаления ненужного дропа: Надо создать папки xml/source и xml/output в папке с этим файлом. В source положить xml файл, в output будет отфильтрованный import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.*; import java.util.LinkedList; import java.util.List; public class Runner { static List<Integer> items = new LinkedList<Integer>(); static Integer[] helperArray; static { items.clear(); //Заталкиваем ID в коллекцию, например адену и краски items.add(57); items.add(4448); /* Для удобства можно добавлять через и массив: Раскомментируйте для работы через массив helperArray = new Integer[]{ 1518, 1518, 1518, 1518, 1518, 1518, 1518, }; items.addAll(Arrays.asList(helperArray)); */ } public static void main(String[] args) { File f = new File("xml\\source"); File[] files = f.listFiles(); for (File file : files) { try { if (!(file.exists() && file.isFile())) { System.out.println("File " + file.getName() + " doesn't exists or not a file"); continue; } File fXMlFile = file; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(); inputSource.setCharacterStream(new StringReader(convertXMLFileToString(fXMlFile.getAbsolutePath()))); Document parse = documentBuilder.parse(file); deleteDropDate(parse); File newFile = new File("xml\\output\\" + file.getName()); if (newFile.exists()) { newFile.delete(); } else { newFile.createNewFile(); } saveFile(parse, newFile); System.out.println("Success. Total affected rows: " + count); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } } static int count; public static void deleteDropDate(Document document) { count = 0; document.normalize(); NodeList nodes = document.getElementsByTagName("npc"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList drops = element.getElementsByTagName("drops"); for (int j = 0; j < drops.getLength(); j++) { NodeList category = element.getElementsByTagName("category"); for (int k = 0; k < category.getLength(); k++) { Element currDropData = (Element) category.item(k); NodeList drop = currDropData.getElementsByTagName("drop"); for (int l = 0; l < drop.getLength(); l++) { Node item = drop.item(l); Integer integer = Integer.valueOf(item.getAttributes().item(1).getTextContent()); if (items.contains(integer)) { item.getParentNode().removeChild(item); System.out.println("Removed " + integer); ++count; } } } } } } public static String convertXMLFileToString(String fileName) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); InputStream inputStream = new FileInputStream(new File(fileName)); org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream); StringWriter stw = new StringWriter(); Transformer serializer = TransformerFactory.newInstance().newTransformer(); serializer.transform(new DOMSource(doc), new StreamResult(stw)); return stw.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } public static void saveFile(Document document, File file) throws TransformerException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(file); transformer.transform(source, result); System.out.println("File saved!"); } } 4 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Insider 389 Опубликовано 23 марта, 2014 Полезная вещица! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
countrist 2 Опубликовано 4 апреля, 2014 + Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
kaganpwnz 82 Опубликовано 26 февраля, 2019 Up очень нужна инфа как запустить данный скрипт Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
kaganpwnz 82 Опубликовано 26 февраля, 2019 Разобрался. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
kaganpwnz 82 Опубликовано 26 февраля, 2019 (изменено) Скрипта нету не у кого нормально под aCis 376+, этот прямо со всем печально удаляет. Изменено 26 февраля, 2019 пользователем kaganpwnz Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
terege 110 Опубликовано 26 февраля, 2019 Обращайся напишу под сборку Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Link 72 Опубликовано 26 февраля, 2019 (изменено) У меня удаление всех книг татемов через Notepad++ заняло в порядке 5 - 10 минут! Не чего тяжелого нету. Хотя в сборке присутствует мод по убиранию любых вещей из дропа. Изменено 26 февраля, 2019 пользователем Link Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты