Java DOM避免保留空白

Java DOM避免保留空白,java,xml,xsd,xml-parsing,java-8,Java,Xml,Xsd,Xml Parsing,Java 8,有没有办法避免在DOM中保留空白(无论哪个java库) 我有一个通过XSD模式验证的XML文件。根据这个模式,只有元素包含文本。另一个元素仅包含元素节点。当我编辑XML文件时,为了提高可视性,我有几种类型的空白,如tab、blank、回车等 如何解析XML(没有xslt,只有java库)而不保留模式未授权的所有空白?建议设置“要求解析器处于验证模式”(),然后支持忽略纯元素内容模型中的空白 下面是一个示例,给出了Java代码 DocumentBuilderFactory dbf = Do

有没有办法避免在DOM中保留空白(无论哪个java库)

我有一个通过XSD模式验证的XML文件。根据这个模式,只有
元素包含文本。另一个元素仅包含元素节点。当我编辑XML文件时,为了提高可视性,我有几种类型的空白,如tab、blank、回车等

如何解析XML(没有xslt,只有java库)而不保留模式未授权的所有空白?

建议设置“要求解析器处于验证模式”(),然后支持忽略纯元素内容模型中的空白

下面是一个示例,给出了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>
并为
元素提供一个仅定义元素内容的模式,例如

<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。

表明存在“要求解析器处于验证模式”()的设置,然后支持忽略纯元素内容模型中的空白

下面是一个示例,给出了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>
并为
元素提供一个仅定义元素内容的模式,例如

<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。

您好,Martin,感谢您的回复。我测试了这段代码,在所有情况下,我有5个Child节点。我使用Netbeans 8.1和Java 1.8来运行和测试代码,它给出了我在回答中陈述的结果。我不知道为什么会得到不同的结果,也许其他人更了解该API以及它在不同Java版本中的支持程度。您可能需要编辑您的问题,并说明您正在使用的Java版本,或者在得到不同结果时需要使用的Java版本。我也使用Java 8。听起来,当我添加
System.out.println(“Java版本:”+System.getProperty(“Java.version”))时,我在Windows上它输出
Java版本:1.8.0\u 77
。我的合资企业是:
Java版本:1.8.0\u 66
。我将与0 M 77Hi Martin一起尝试,谢谢您的回复。我测试了这段代码,在所有情况下,我有5个Child节点。我使用Netbeans 8.1和Java 1.8来运行和测试代码,它给出了我在回答中陈述的结果。我不知道为什么会得到不同的结果,也许其他人更了解该API以及它在不同Java版本中的支持程度。您可能需要编辑您的问题,并说明您正在使用的Java版本,或者在得到不同结果时需要使用的Java版本。我也使用Java 8。听起来,当我添加
System.out.println(“Java版本:”+System.getProperty(“Java.version”))时,我在Windows上它输出
Java版本:1.8.0\u 77
。我的合资企业是:
Java版本:1.8.0\u 66
。我将尝试使用0_77