1. 程式人生 > >XML DTD約束 對xml文件的crud的查詢Read Retrieve操作 xml遞歸遍歷

XML DTD約束 對xml文件的crud的查詢Read Retrieve操作 xml遞歸遍歷

exception 文件的 rgs oid ioe 8.0 private throws wid

技術分享圖片

本地的dtd文檔

技術分享圖片

xml中引入dtd文檔

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
    <書>
        <書名>Java就業培訓教程</書名>
        <作者>張孝祥</作者>
        <售價>39.00</售價>
    </書>
    <書>
        <書名>JavaScript網頁開發</書名>
        <作者>張孝祥</作者>
        <售價>28.00</售價>
    </書>
        <狗></狗>
</書架>

引入後,發現狗狗是不合法的,必須符合dtd約束

根據下面dtd文檔生成xml文檔

技術分享圖片

當中有正則,其中+表示一次或多次 ?表示0次或多次 *表示0次或多次

dtd的約束無法約束數字等特有表達,只能字符串,所以基本被淘汰

package com.swift.xml;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DemoXML { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/index.xml"); NodeList list = document.getElementsByTagName("書"); Node node = list.item(1); // 拿到書的所有文本 String text = node.getTextContent(); System.out.println(text); // 得到根節點 Node root = document.getElementsByTagName("書架").item(0); // 遞歸遍歷不包括文本 traverse(root); } private static void traverse(Node root) { if (root instanceof Element) { System.out.println(root.getNodeName()); } NodeList list = root.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); traverse(node); } } }

查詢與遞歸操作

其中要註意:Element類的包導入有很多選擇,這裏要選擇w3c的

XML DTD約束 對xml文件的crud的查詢Read Retrieve操作 xml遞歸遍歷