XML支持混合內容,意思是元素可以同時具有文本元素和元素子節點。這是爲了支持使用情況如下所示:
<text>I've bolded the <b>important</b> part.</text>
的input.xml
這意味着,在默認情況下DOM解析器將把空白節點下面的文檔作爲顯著的(下面是一個簡化XML文檔的版本):
<RootNode>
<PR1>PR1</PR1>
</RootNode>
演示代碼
如果您有XML架構,則可以在DocumentBuilderFactory
上設置ignoringElementContentWhitespace
屬性,因爲那樣DOM解析器將知道空白是否以及何時有意義。
import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.parsers.*;
import javax.xml.validation.*;
import org.w3c.dom.Document;
public class Demo {
public static void main(String[] args) throws Exception {
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema s = sf.newSchema(new File("src/forum16231687/schema.xsd"));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setSchema(s);
dbf.setIgnoringElementContentWhitespace(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse(new File("src/forum16231687/input.xml"));
System.out.println(d.getDocumentElement().getChildNodes().getLength());
}
}
模式。xsd
如果您創建schema.xsd
,如下所示,那麼演示代碼將報告根元素有1個子節點。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="RootNode">
<complexType>
<sequence>
<element name="PR1" type="string"/>
</sequence>
</complexType>
</element>
</schema>
如果更改schema.xsd使得RootNode
具有混合內容的演示代碼將報告RootNode
有3個節點。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="RootNode">
<complexType mixed="true">
<sequence>
<element name="PR1" type="string"/>
</sequence>
</complexType>
</element>
</schema>
這裏是一個[DOM分析樣品] [1] 也許這會幫助你。 [1]:http://stackoverflow.com/a/7902162/529543 – 2013-04-26 08:21:10
也許問題標題應該改變。我仔細研究了一下關於混合內容和DOM解析的一些信息,並在那裏得到了答案,但問題標題乍一看並沒有吸引我。就像「使用Java DOM解析帶有混合內容的XML的問題」。 – dodecaplex 2016-10-25 06:52:34