web框架学习前复习——xml(2)

                        xml
SAX解析xml文件
<?xml version="1.0" encoding="UTF-8"?>
<书架>
    <>
        <书名>书名1</书名>
        <作者>作者1</作者>
        <售价>2</售价>
    </>
    <>
        <书名>书名2</书名>
        <作者>作者2</作者>
        <售价>10</售价>
    </>
</书架>
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public class SaxDemo1 {
    public static void main(String[] args) throws Exception {
        // 得到创建解析器的工厂
        SAXParserFactory spf = SAXParserFactory.newInstance();
        // 得到解析器
        SAXParser parser = spf.newSAXParser();
        // 得到读取器
        XMLReader reader = parser.getXMLReader();
        // 给读取器注册内容处理器(ContentHandler)
        reader.setContentHandler(new MyContentHandler());
        // 解析文档
        reader.parse("src/book.xml");
    }
}
//打印第二个作者名字
class MyContentHandler extends DefaultHandler {
    private boolean isAuthor = false;//是不是作者
    private int index = 1;//索引
    public void startElement(String uri, String localName, String qName,
            Attributes atts) throws SAXException {
        if("作者".equals(qName)){
            isAuthor = true;
        }
    }
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if("作者".equals(qName)){
            index++;
        }
        isAuthor = false;
    }
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if(index==2&&isAuthor){//当if条件满足就执行
            System.out.println(new String(ch,start,length));
        }
    }

}
DOM4J解析XML文档
<?xml version="1.0" encoding="UTF-8"?>
<State Code="37" Name="山东" description="省会" GDP="54684亿"> 
  <City> 
    <Name>济南</Name>  
    <Region>历下区</Region> 
  </City>  
  <City>青岛</City>  
  <City>东营</City>  
  <City>泰安</City>  
  <City>潍坊</City> 
</State>

建立dom4j工具包提供获得根元素静态方法

import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4JUtil {
    public static Document getDocument() throws Exception{
        SAXReader sa = new SAXReader();
        Document doc = sa.read("src/LocList.xml");
        return doc;
    } 
    public static void write2xml(Document doc)throws Exception{
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");//默认就是UTF-8
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/LocList.xml"), format);
        writer.write(doc);
        writer.close();
    }
}

利用dom4J解析前面的xml文件

public class Dom4JDemo {
    public void main(String[] args) throws Exception{
        Document doc = Dom4JUtil.getDocument();
        Element root = doc.getRootElement();//得到根元素
        Element firstCity = root.element("City");//多个只返回第一个
        System.out.println(firstCity.elementText("Name"));
        List<Element> es = root.elements();
        Element e = es.get(3);//打印3号元素主体内容
        System.out.println(e.getText());
    }

XML中引入Schema约束

查看Schema的文档,找到targetNamespace的取值,在xml中用xmlns关键字声明该名称空间。”itheima”就是给名称空间取了一个短名称。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  //xmlns为关键字
    targetNamespace="http://www.xxxxx.com" elementFormDefault="qualified">
    <xs:element name='书架'>
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded'>
                <xs:element name='书'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

引入xml文档中

<?xml version="1.0" encoding="UTF-8"?>
<itheima:书架 xmlns:itheima="http://www.xxxxx.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    //schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。
    xsi:schemaLocation="http://www.xxxxx.com book.xsd">
    <itheima:书>
        <itheima:书名>书名1</itheima:书名>
        <itheima:作者>作者1</itheima:作者>
        <itheima:售价>20</itheima:售价>
    </itheima:书>
</itheima:书架>

猜你喜欢

转载自blog.csdn.net/u011456867/article/details/52071870
今日推荐