2012-04-19 145 views
2

我想將特定的xml元素移動到列表頂部。將xml元素移動到xml文件中的新位置

XML輸入:

<?xml version="1.0" encoding="UTF-8"?> 
<Values>  
    <Elem Value="1"/>  
    <Elem Value="2"/> 
    <Elem Value="3"/> 
</Values> 

期望的結果:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Values>  
    <Elem Value="2"/> 
    <Elem Value="1"/>  
    <Elem Value="3"/> 
</Values> 

這是我的代碼:

String valueToFind = "2"; 

File mFile = new File("C:\\xml.xml"); 
DocumentBuilder builder; 
try { 
    builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 

    Document document = builder.parse(mFile); 

    NodeList nodeList = document.getElementsByTagName("Elem"); 
    Element element = null; 

    for (int i = 0; i < nodeList.getLength(); i++) { 
    element = (Element) nodeList.item(i); 
    String value = element.getAttribute("Value"); 

    if (valueToFind.equals(value)) 
     break; 
     else 
     element = null; 
    } 

    if (element != null) { 
    document.getDocumentElement().removeChild(element); 
    document.getDocumentElement().insertBefore(element, nodeList.item(0)); 
    } 

    Source source = new DOMSource(document); 
    Result result = new StreamResult(mFile.getPath()); 

    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); 
    transformer.transform(source, result); 
} 

但結果是不正確的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Values>  
    <Elem Value="2"/> 
    <Elem Value="1"/>  

    <Elem Value="3"/> 
</Values> 

爲什麼我會得到空行?!

回答

0

原始XML文件包含帶有空格的文本節點。您的代碼只刪除Elem節點並將其插入列表頂部,但包含換行符的文本節點仍然存在。

0

沒有直接的屬性來刪除空白節點或文本節點與解析器中可用的空白。因爲解析器能夠解析具有/沒有這些節點的XML。但是,如果您仍想這樣做,那麼XML規範的屬性xml:space =「preserve」,但它不適用於Java示例。這是刪除這些節點的典型複雜方式。

Remove nodes and empty lines

Stackoverflow Example