1

DOM Parser Empty 表記を短い形式から長い形式に変更する方法はありますか?

私は欲しい

 <book></book>

本の代わりに

<book/>

短い表記法では機能しないサードパーティの XML リーダーがあります。私の XML オブジェクトはすべて DOM です。これについて最善の方法は何ですか?

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(XMLFile);
transformer.transform(source, result);

ありがとう

4

2 に答える 2

2

まあ、これは推測です.htmlはショートサーキットの空のタグを認識しないので、トランスフォーマーで出力プロパティを「html」に設定すると、おそらくそれが可能になります(私は思う)。

transformer.setOutputProperty(OutputKeys.METHOD, "html");

注意: テストされていません!

アップデート:

動作確認しただけです。このスニペット:

String xml = "<root><a/></root>";
Document doc = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder()
    .parse(new ByteArrayInputStream(xml.getBytes()));
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.METHOD, "html");
t.transform(new DOMSource(doc), new StreamResult(System.out));

次の出力が生成されます。

<root>
<a></a>
</root>
于 2013-01-07T23:40:57.863 に答える
1

私は同じ問題を抱えていました。その結果を取得する関数です。

public static String fixClosedTag(String rawXml){

    LinkedList<String[]> listTags = new LinkedList<String[]>(); 
    String splittato[] =  rawXml.split("<");

    String prettyXML="";

    int counter = 0;
    for(int x=0;x<splittato.length;x++){
        String tmpStr = splittato[x];
        int indiceEnd = tmpStr.indexOf("/>");
        if(indiceEnd>-1){
            String nameTag = tmpStr.substring(0, (indiceEnd));
            String oldTag = "<"+ nameTag +"/>";
            String newTag = "<"+ nameTag +"></"+ nameTag +">";
            String tag[]=new String [2];
            tag[0] = oldTag;
            tag[1] = newTag;
            listTags.add(tag);
        }
    }
    prettyXML = rawXml;

    for(int y=0;y<listTags.size();y++){
        String el[] = listTags.get(y);

        prettyXML = prettyXML.replaceAll(el[0],el[1]);
    }

    return prettyXML;
}
于 2016-09-30T14:21:25.690 に答える