Я создал файл xml из базы данных excel и автоматически содержит элемент с именем " offset
". Чтобы мой новый файл соответствовал моим потребностям, я хочу удалить этот элемент с помощью java. вот xml-контент:
<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>
Я сделал код, который читает (с буферизованным считывателем) и записывает содержимое в новый файл и использует условие, если:
while (fileContent !=null){
fileContent=xmlReader.readLine();
if (!(fileContent.equals("<offset/>"))){
System.out.println("here is the line:"+ fileContent);
XMLFile+=fileContent;
}
}
Но это не работает
Я лично рекомендовал бы использовать правильный XML-парсер, такой как Java DOM, для проверки и удаления ваших узлов, вместо того, чтобы иметь дело с вашим XML как raw String
(yuck). Попробуйте что-то подобное, чтобы удалить свой "смещенный" узел.
File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
NodeList nList = doc.getElementsByTagName("offset");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
node.getParentNode().removeChild(node);
}
Вышеупомянутый код удаляет любые "смещенные" узлы в XML файле.
Если проблемы с ресурсами/скоростью являются проблемой (например, когда ваш_xml.xml огромен), вам лучше использовать SAX, который быстрее (немного больше кода) и не сохраняет XML в памяти.
После того, как ваш Document
будет отредактирован, вы, вероятно, захотите преобразовать его в String для синтаксического анализа на OutputStream
.
Надеюсь это поможет.
В исходном коде, который вы включили, вы имеете:
while (fileContent !=null)
Вы инициализируете fileContent некоторым ненулевым значением перед этой строкой? Если нет, код внутри вашего блока не будет работать.
Но я согласен с другими плакатами в том, что простой replaceAll() будет более кратким, а реальный XML API лучше, если вы хотите сделать что-то более сложное.
String xml = "<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>";
xml = xml.replaceAll("<offset/>", "");
System.out.println(xml);
Просто попробуйте заменить ненужную строку пустой строкой. Это быстро... и серьезно грязно. Но может быстро решить вашу проблему... просто снова появиться ;-)
fileContent.replace(" <offset/>
," ");
String sXML= "<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>";
System.out.println(sXML);
String sNewXML = sXML.replace("<offset/>", "");
System.out.println(sNewXML);