从org.w3c.dom.Element中强制removeAttribute()

时间:2018-08-14 10:11:51

标签: java xml dom svg batik

我正在尝试从org.w3c.dom.Element中删除属性。 使用removeAttribute时,属性名称(具有默认值)仍包含在生成的XML(在本例中为SVG文件)中。 在JavaDoc中,我找到了以下解释:

  

如果在DTD中定义了已删除属性的默认值,则会立即出现一个新属性,其中包含该默认值以及相应的名称空间URI,本地名称和前缀(如果适用)。

如何避免这种行为?我无法更改DTD。我只是想摆脱这个属性。

编辑: T.J.克劳德问我一个简单的例子。

import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

public class MinimalExample {

    public static void main(String[] args) throws Exception {
        String parser = XMLResourceDescriptor.getXMLParserClassName();
        SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
        Document doc = f.createDocument("batik.svg");
        Element svg = doc.getDocumentElement();

        svg.removeAttribute("contentStyleType");

        System.out.println(getXML(doc));
    }
    public static String getXML(Document doc) throws ParserConfigurationException, TransformerConfigurationException, TransformerException {
        DocumentBuilderFactory domFact = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = domFact.newDocumentBuilder();
        DOMSource domSource = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        //transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(domSource, result);
        System.out.println("XML IN String format is: \n" + writer.toString());
        return writer.toString();
    }
}

0 个答案:

没有答案