2016-11-10 117 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