是否有任何方法來避免保留DOM中的空白(無論哪個java庫)?DOM避免保留空格
我有一個由XSD模式驗證的XML文件。通過這個模式,只有<text>
元素包含文本。另一個元素只包含元素節點。當我編輯XML文件,對於大多數可見性,我有幾種類型的空格,如製表符,空白,回車,...
我怎麼能解析我的XML(沒有xslt,只有java庫),沒有保留所有空格未通過架構授權?
是否有任何方法來避免保留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