Java 解析 XML

Java 解析 XML

标签: Java基础


XML解析技术有两种 DOM SAX

  • DOM方式
    依据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象
    • 长处: 便于实现
    • 缺点: XML文件过大可能造成内存溢出
  • SAX方式
    採用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用对应解析方法
    • 长处: 不会造成内存溢出,
    • 缺点: 查询不方便,但不能实现

不同的公司和组织提供了针对DOM和SAX两种方式的解析器


JAXP 解析

JAXP是JavaSE的一部分,在javax.xml.parsers包下,分别针对dom与sax提供了例如以下解析器:

  • Dom
    • DocumentBuilder
    • DocumentBuilderFactory
  • SAX
    • SAXParser
    • SAXParserFactory

演示样例XML例如以下,以下我们会使用JAXP对他进行 操作

  • config.xml
<?

xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans SYSTEM "constraint.dtd"> <beans> <bean id="id1" class="com.fq.domain.Bean"> <property name="isUsed" value="true"/> </bean> <bean id="id2" class="com.fq.domain.ComplexBean"> <property name="refBean" ref="id1"/> </bean> </beans>

  • constraint.dtd
<!ELEMENT beans (bean*) >
        <!ELEMENT bean (property*)>
        <!ATTLIST bean
                id CDATA #REQUIRED
                class CDATA #REQUIRED
                >

        <!ELEMENT property EMPTY>
        <!ATTLIST property
                name CDATA #REQUIRED
                value CDATA #IMPLIED
                ref CDATA #IMPLIED>

JAXP-Dom

/**
 * @author jifang
 * @since 16/1/13下午11:24.
 */
public class XmlRead {

    @Test
    public void client() throws ParserConfigurationException, IOException, SAXException {
        // 生成一个Dom解析器
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

        // 解析XML文件
        Document document = builder.parse(ClassLoader.getSystemResourceAsStream("config.xml"));

        // ...
    }
}

DocumentBuilderparse(String/File/InputSource/InputStream param)方法能够将一个XML文件解析为一个

posted @ 2017-07-27 20:52  zsychanpin  阅读(305)  评论(0编辑  收藏  举报