5

「このファイルを編集しないでください」コメントの後に改行を追加する方法は? 改行で textnode を追加しようとしましたが、うまくいきません。

コード:

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Main {
    public static void main(String[] args) {
        try {
            final Document doc = DocumentBuilderFactory.newInstance().
                    newDocumentBuilder().newDocument();

            doc.appendChild(doc.createComment(" DO NOT EDIT THIS FILE "));

            final Element rootElement = doc.createElement("projects");
            doc.appendChild(rootElement);

            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            transformer.transform(new DOMSource(doc), new StreamResult(new File("C:/abc.xml")));
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}

出力:

<!-- DO NOT EDIT THIS FILE --><projects/>

4

3 に答える 3

0

コードを実行したときにも空白行があります。ファイルをエディターで表示していますか、それとも解析して表示していますか? その場合、xml:space="preserve" 設定がパーサー コードで不安定になる可能性があるためです。

もう 1 つのオプションは、コメントを XML ルート要素自体に配置することです。

        final Element rootElement = doc.createElement("projects");
        doc.appendChild(rootElement);
        rootElement.appendChild(doc.createComment(" DO NOT EDIT THIS FILE "));

いくつかの点で、これはより相互運用性があります。たとえば、xinclude を使用してファイルの最終バージョンに埋め込むとします。ファイルを編集しないようにという通知が質問にある方法は含まれません。ルート要素内に配置すると、そうなります (同じ理由で file と言うのではなく、この project 要素の内容を編集しないように変更する必要があります)。

于 2012-08-04T17:05:37.173 に答える
0

インデントを有効にしても、コメントと次のノードの深さが 0 であるため、コメントの後に newLine はありません。

于 2012-08-04T17:27:41.780 に答える