2016-11-10 111 views
0

是否有任何方法来避免保留DOM中的空白(无论哪个java库)?DOM避免保留空格

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

我怎么能解析我的XML(没有xslt,只有java库),没有保留所有空格未通过架构授权?

回答

3

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

+0

马丁您好:感谢您的答复。我测试了这个代码,并且在所有情况下我有5个childe节点 – Valeriane

+0

我使用Netbeans 8.1和Java 1.8来运行和测试代码,并给出了我在答案中说明的结果。我不知道为什么你会得到不同的结果,也许其他人知道这个API更好,以及它在不同的Java版本中支持得如何。您可能想编辑您的问题,并指出您正在使用的Java版本,或需要分别与您使用哪一个版本时得到不同结果。 –

+0

我也使用Java 8。 – Valeriane