2

我想将特定的 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>

为什么我得到空行?!

4

2 回答 2

0

没有直接属性可以删除解析器中可用的空白节点或文本节点。因为解析器能够解析带有/不带有这些节点的 XML。但是,如果您仍然想这样做,那么由于 XML 规范具有属性 xml:space="preserve",但它不适用于 Java 示例。这是删除这些节点的典型复杂方法。

删除节点和空行

堆栈溢出示例

于 2012-04-19T07:43:04.340 回答
0

原始 XML 文件包含带有空格的文本节点。您的代码仅删除 Elem 节点并将其插入列表顶部,但包含换行符的文本节点仍然存在。

于 2012-04-19T07:02:18.010 回答