2012-04-19 143 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