javawebXML及Jaxp解析XML


XMLExtensible Markup Language):可扩展标记语言,w3c组织发布,目前遵循2000年发布的XML1.0规范!

XML文件分为:文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令

processing introduction

文档声明:<?xml version=”1.0” encoding=”GB2312” standalone=”yes”?>

                standalone说明文档是否独立。

XML元素:XML文件中出现的标签,一个标签分为开始标签和结束标签。

格式良好的XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。

一个XML元素可以包含字母、数字以及其他一些可见字符,但必须遵守:

1、  区分大小写

2、  不能以数字或“_”(下划线)开头

3、  不能以xmlXMLXml开头

4、  不能包含空格

5、  名称中间不能包含(:)

Tip:属性

Xml文件注释:“<!—注释-->

TipCDATA区:在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当做原始内容处理,可以把这些内容放在CDATA区里,对于CDATA区的内容,XML解析引擎不会处理,而是原封不动的输出。

语法:<![CDATA[内容]]>

Tip:转义字符:

&&amp)、<(&it)>(&gt)”(&quot)’(&apos)

Tip:处理指令:简称PIprocessing introduction),用来指挥解析引擎如何解析XML文档内容。

如:<?xml-stylesheet type=”text/css” href=”1.css”?>---通知解析引擎,应用css文件显示xml文档内容。

XML声明语句就是最常见的一种处理指令。

TipXML约束:在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

常用的约束技术:XML DTDDocument Type Definition,文档类型定义)、XML Schema

检查DTD正确性:可以直接用eclipse校验。

XML编程(C--create  R—read  U—update  D—delete):

XML解析方式有两种:domDocument Object Model—文档对象模型,适合增删改查,耗内存)、saxSimple API for XML,占用内存少,解析速度快,只适合做文档的读取,不适合增删改查)

XML解析开发包:JaxpSUN)、Jdomdom4j

调整JVM内存大小:JVM的初始内存大小是64M,超过则内存溢出

调整方式为:启动时在jvmarguments里加上(-Xml80m)à即在内存开辟了80M的空间

 

使用JaxpXML文档进行dom解析:

1、  创建工厂

2、  得到dom解析器

3、  解析XML文档,得到代表文档的document

    publicvoid test()throws ParserConfigurationException, SAXException, IOException{

       //打印XML中的所有标签

       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

       DocumentBuilder builder=factory.newDocumentBuilder();

       Document document=builder.parse("src/book.xml");

       Node root=document.getElementsByTagName("书架").item(0);

       list(root);

    }

    privatevoid list(Node root) {

       if(rootinstanceof Element){

          System.out.println(root.getNodeName());

       }

       NodeList list=root.getChildNodes();

       for(int i=0;i<list.getLength();i++){

          Node child=list.item(i);

          list(child);

       }

    }

}

    @Test//XML文档中添加节点:<售价>59.00</售价>

    publicvoid add()throws SAXException, IOException, ParserConfigurationException, TransformerException{

       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

       DocumentBuilder builder=factory.newDocumentBuilder();

       Document document=builder.parse("src/book.xml");

      

       //创建节点

       Element price= document.createElement("售价");

       price.setTextContent("59.00");

      

       //把创建的节点挂在第一本书上

       Element book=(Element) document.getElementsByTagName("").item(0);

       book.appendChild(price);

      

       //把更新后内存写回XML文档

       TransformerFactory tffactory=TransformerFactory.newInstance();

       Transformer tf=tffactory.newTransformer();

       tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));

    }

   

   

    //向文档中指定位置添加节点

    @Test

    publicvoid test2()throws ParserConfigurationException, SAXException, IOException, TransformerException{

       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

       DocumentBuilder builder=factory.newDocumentBuilder();

       Document document=builder.parse("src/book.xml");

       //创建节点

       Element price=document.createElement("售价");

       price.setTextContent("59.00");

       //得到参考节点

       Element refNode=(Element) document.getElementsByTagName("售价").item(0);

       //得到要悬挂的节点

       Element book=(Element) document.getElementsByTagName("").item(0);

       //往节点指定位置插崽

       book.insertBefore(price, refNode);

       //把更新后内存写回XML文档

             TransformerFactory tffactory=TransformerFactory.newInstance();

             Transformer tf=tffactory.newTransformer();

             tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book.xml")));

    }

/* 

    节点上添加属性

    Element bookName=(Element)document.getElementsByTagName("书名").item(0);

    bookName.setAttribute("name","XXXXX");*/

   

/*  删除节点

    得到要删除的节点

    Element e=(Element)document.getElementBytagName("售价").item(0);

    得到要删除节点的爸爸,再删除儿子节点

    e.getParentNode().removeChild(e);*/

   

/*  更新

    Element e=(Element)document.getElementByTagName("售价").item(0);

    e.setTexttextContent("109");*/

   

   

}

SAX解析(JAXP):

    publicstaticvoid main(String[] args)throws ParserConfigurationException, SAXException, IOException{

       //获得解析工厂

       SAXParserFactory factory= SAXParserFactory.newInstance();

       //得到解析器

       SAXParser sp=factory.newSAXParser();

       //得到读取器

       XMLReader reader=sp.getXMLReader();

       //设置内容处理器(implementsContenthandlerextends DefaultHandler)

       reader.setContentHandler( );

       //读取XML文档内容

       reader.parse("src/book.xml");

    }

}

开发中所用方法:

XML

<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><书架>

    <>

       <书名 name="XXXXX">Java就业培训教程</书名>

       <作者>张孝祥</作者>

       <售价>59.00</售价>

        <售价>109</售价>

    <售价>59.00</售价></>

    <>

       <书名>JavaScript网页开发</书名>

       <作者>张孝祥</作者>

       <售价>28.00</售价>

    </>

</书架>

 

    publicstaticvoid main(String[] args) {

       // 获得解析工厂

       SAXParserFactory factory = SAXParserFactory.newInstance();

       // 得到解析器

       SAXParser sp = factory.newSAXParser();

       // 得到读取器

       XMLReader reader = sp.getXMLReader();

       // 设置内容处理器(implementsContenthandlerextends DefaultHandler)

       reader.setContentHandler();

       // 读取XML文档内容

       reader.parse("src/book.xml");

       // XML文档中的每一本书封装到一个book对象,并把多个book对象放在一个list集合返回

       class BeanListHandlerextends DefaultHandler {

          privateListlist =newArrayList();

          private StringcurrentTag;

          private Bookbook;

 

          @Override

          publicvoid startElement(String uri, String localName, String name,

                 Attributes attributes)throws SAXException {

             //TODO Auto-generated method stub

             currentTag = name;

             if ("".equals(currentTag)) {

                 book =new Book();

             }

 

          }

 

          @Override

          publicvoid characters(char[] ch,int start,int length)

                 throws SAXException {

             if ("书名".equals(currentTag)) {

                 String name =new String(ch, start, length);

                 book.setName(name);

             }

             if ("作者".equals(currentTag)) {

                 String author =new String(ch, start, length);

                 book.setAuthor(author);

             }

             if ("售价".equals(currentTag)) {

                 String price =new String(ch, start, length);

                 book.setAuthor(price);

             }

          }

 

          @Override

          publicvoid endElement(String uri, String localName, String qName)

                 throws SAXException {

             if (name.equals("")) {

                  list.add(book);

                 book =null;

             }

             currentTag =null;

          }

          publicList getList(){

             returnlist;

          }

       }

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中解析XML可以使用Java内置的DOM解析器或者使用第三方库如JAXB或JDOM。这里我将介绍如何使用DOM解析器进行XML解析。 首先,你需要添加相关的依赖到你的项目中。在pom.xml文件中,添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>javax.xml.parsers</groupId> <artifactId>jaxp-api</artifactId> </dependency> ``` 接下来,我们创建一个XML解析的工具类。这个工具类可以使用DOM解析器来解析XML文件。 ```java import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; public class XmlParser { public void parseXml(String filePath) { try { File xmlFile = new File(filePath); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(xmlFile); // 获取根元素 Element rootElement = document.getDocumentElement(); // 获取所有子元素 NodeList nodeList = rootElement.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; // 根据标签名获取元素值 String value = element.getElementsByTagName("tag_name").item(0).getTextContent(); System.out.println(value); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们通过DOM解析解析XML文件,并使用`getElementsByTagName`方法来获取指定标签的元素值。 最后,你可以在你的代码中实例化这个工具类,并调用`parseXml`方法来解析XML文件。 ```java public class Main { public static void main(String[] args) { XmlParser xmlParser = new XmlParser(); xmlParser.parseXml("path_to_xml_file"); } } ``` 请将`path_to_xml_file`替换为你实际的XML文件路径。这样你就可以使用DOM解析器来解析XML文件了。希望对你有所帮助!如果有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值