DOM避免保留空格

时间:2016-11-10 09:43:03

标签: java xml xsd xml-parsing java-8

是否有办法避免在DOM(无论哪个java库)中保留空格?

我有一个由XSD架构验证的XML文件。通过此架构,只有<text>元素包含文本。另一个元素仅包含元素节点。当我编辑XML文件时,对于大多数可见性,我有几种类型的空格,如tab,blank,回车,......

如何解析我的XML(没有xslt,只有java库)而不保留未经架构授权的所有空格?

1 个答案:

答案 0 :(得分:4)

https://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#setIgnoringElementContentWhitespace(boolean)表明有一个设置“要求解析器处于验证模式”(https://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#setSchema(javax.xml.validation.Schema)),然后支持忽略仅元素内容模型中的空格。

给出Java代码

,这是一个例子
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    dbf.setIgnoringElementContentWhitespace(true);

    Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(new File("schema1.xsd"));
    //dbf.setSchema(schema);

    DocumentBuilder db = dbf.newDocumentBuilder();

    Document doc = db.parse("file1.xml");

    System.out.println(doc.getDocumentElement().getChildNodes().getLength());

带有示例文件

<root>
    <item>a</item>
    <item>b</item>
</root>

当我从

中删除注释时,子节点输出的数量是5
dbf.setSchema(schema);

并且只有一个模式定义元素root元素的内容,例如

<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

    <xs:element name="root">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
                <xs:element name="item" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

子节点的输出仅为2。