是否有办法避免在DOM(无论哪个java库)中保留空格?
我有一个由XSD架构验证的XML文件。通过此架构,只有<text>
元素包含文本。另一个元素仅包含元素节点。当我编辑XML文件时,对于大多数可见性,我有几种类型的空格,如tab,blank,回车,......
如何解析我的XML(没有xslt,只有java库)而不保留未经架构授权的所有空格?
答案 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>
当我从
中删除注释时,子节点输出的数量是5dbf.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。