Java DOM避免保留空白
有没有办法避免在DOM中保留空白(无论哪个java库) 我有一个通过XSD模式验证的XML文件。根据这个模式,只有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
元素包含文本。另一个元素仅包含元素节点。当我编辑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