2016-09-27 3 views
-1

Я хочу создать новый Xml-файл только из выбранных узлов. Я использую dom4j для разбора и создания нового XML-файла. Пример позволяет предположить имя Вершины клиента = Джозеф является дочерним корневым элементом TRX я хочу показать целые элементы, которые содержат Иосиф и создать новый файлЯ хочу выполнить поиск и конкретные узлы или элементы в xml и создать новый xml из узлов выбора

 enter code here 
    File inputFile = new File("C:\\Users\\db2admin\\Desktop\\S4decs\\tlog01_004.xml"); 
    SAXReader reader = new SAXReader(true); 
    reader.setValidation(false); 
    reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
    Document document = reader.read(inputFile); 
    document.getRootElement(); 



    document.selectNodes("//TRX[@type]='16'").size(); 
    document.selectNodes("/CUSTOMER").size(); 




    // Pretty print the document to System.out 
    OutputFormat format = OutputFormat.createPrettyPrint(); 
    XMLWriter writer; 
    writer = new XMLWriter(System.out, format); 
    writer.write(document); 
    } catch (DocumentException e) { 
    e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) {   
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 




<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE TRANSACTIONS SYSTEM "tlog.dtd"> 
<TRANSACTIONS storeid="4" sbs="780030" location="1"> 
<TRX type="16" term="742" trxnum="143895" saleperson="0" supervisor_id="152332149" storeid="4" sbs="780030" opcode="153135959" date="20160915" endtime="111000"> 
</TRX> 
<TRX type="31" term="742" trxnum="143896" starttime="095720" supervisor_id="152332149" storeid="4" sbs="780030" opcode="153135959" date="20160915" endtime="111001"> 
<CASHOPER managerid="153135959"> 
<PAYMENT id="1" amount="3000.00" descr="CASH" tndnumb="1" exchangetndid="0"> 
    </PAYMENT> 
    </CASHOPER> 
    <LINKTRX linktype="8" prevstoreid="4" prevxactdate="2016-09-14" prevxacttime="22:58:29" prevtermid="0" prevxactid="7620" prevoperid="0"></LINKTRX> 
</TRX> 
<TRX type="16" term="743" trxnum="65729" saleperson="0" supervisor_id="153136068" storeid="4" sbs="780030" opcode="152332262" date="20160915" endtime="111219"> 
</TRX> 
+0

Проблема, когда я запускаю этот файл с показом всего файла Xml –

+0

Вы не вносите никаких изменений в документ. Создайте новый документ и добавьте выбранные узлы из открытого документа в новый. Смотрите: http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html#Creating_a_new_XML_document –

+0

Спасибо, сэр Ф.Клейн –

ответ

0

Вы должны выбрать узлы, нужно, затем добавить их в качестве детей другого элемента и поместите этот элемент как корень нового документа. Обратите внимание, что первое выражение XPath кажется неправильным (возможно, это должно быть // TRX [@ типа = 16])

private Document daMethod(Document document, String xpath) throws Exception{ 
     List<Node> nodes = document.selectNodes(xpath); 

     Element newRoot = DocumentHelper.createElement("TRXS"); 
     for (Node node : nodes) { 
      newRoot.add((Node)node.clone()); 
     } 

     return DocumentHelper.createDocument(newRoot); 
    } 

Надеется, что это помогает.

+0

Спасибо, но я уже использую vtd-Xml, это намного проще в использовании и обладает большей гибкостью, чем DOM –

Смежные вопросы