DOM避免保留空格
问题描述:
是否有任何方法来避免保留DOM中的空白(无论哪个java库)?DOM避免保留空格
我有一个由XSD模式验证的XML文件。通过这个模式,只有<text>
元素包含文本。另一个元素只包含元素节点。当我编辑XML文件,对于大多数可见性,我有几种类型的空格,如制表符,空白,回车,...
我怎么能解析我的XML(没有xslt,只有java库),没有保留所有空格未通过架构授权?
答
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
马丁您好:感谢您的答复。我测试了这个代码,并且在所有情况下我有5个childe节点 – Valeriane
我使用Netbeans 8.1和Java 1.8来运行和测试代码,并给出了我在答案中说明的结果。我不知道为什么你会得到不同的结果,也许其他人知道这个API更好,以及它在不同的Java版本中支持得如何。您可能想编辑您的问题,并指出您正在使用的Java版本,或需要分别与您使用哪一个版本时得到不同结果。 –
我也使用Java 8。 – Valeriane