DOM 避免保留空格

Val*_*ane 1 java xml xsd xml-parsing java-8

有什么方法可以避免在 DOM 中保留空格(无论是哪个 java 库)?

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

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

Mar*_*nen 5

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());
Run Code Online (Sandbox Code Playgroud)

带有示例文件

<root>
    <item>a</item>
    <item>b</item>
</root>
Run Code Online (Sandbox Code Playgroud)

子节点输出的数量是 5,现在当我从

dbf.setSchema(schema);
Run Code Online (Sandbox Code Playgroud)

并有一个模式定义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>
Run Code Online (Sandbox Code Playgroud)

子节点的输出仅为 2。