XML 支持混合内容含义元素可以同时具有文本和元素子节点。这是为了支持以下用例:
<text>I've bolded the <b>important</b> part.</text>
输入.xml
这意味着默认情况下,DOM 解析器会将以下文档中的空白节点视为重要(以下是 XML 文档的简化版本):
<RootNode>
<PR1>PR1</PR1>
</RootNode>
演示代码
如果你有一个 XML 模式,你可以ignoringElementContentWhitespace
在 since 上设置属性,DocumentBuilderFactory
那么 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>