удалить элементы из файла XML в Java

1

Я создал файл 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;
            }


    }

Но это не работает

Теги:

5 ответов

0
Лучший ответ

Я лично рекомендовал бы использовать правильный 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.

Надеюсь это поможет.

0

В исходном коде, который вы включили, вы имеете:

while (fileContent !=null)

Вы инициализируете fileContent некоторым ненулевым значением перед этой строкой? Если нет, код внутри вашего блока не будет работать.

Но я согласен с другими плакатами в том, что простой replaceAll() будет более кратким, а реальный XML API лучше, если вы хотите сделать что-то более сложное.

0
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);
0

Просто попробуйте заменить ненужную строку пустой строкой. Это быстро... и серьезно грязно. Но может быстро решить вашу проблему... просто снова появиться ;-)

fileContent.replace(" <offset/> ," ");

0
   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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню