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 Example では機能しませんでした。これらのノードを削除する際の典型的な複雑な方法を次に示します。

ノードと空行を削除する

スタックオーバーフローの例

于 2012-04-19T07:43:04.340 に答える
0

元の XML ファイルには、空白を含むテキスト ノードが含まれています。コードは Elem ノードのみを削除してリストの先頭に挿入しますが、改行を含むテキスト ノードは残ります。

于 2012-04-19T07:02:18.010 に答える