- 浏览: 11599 次
- 性别:
- 来自: 西安
文章分类
最新评论
一、XMl验证
1、使用DTD验证XML
demo.dtd
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT books (book*)> <!ELEMENT book (name,price,authors,gift?)> <!ATTLIST book ISBN CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT authors (author+)> <!ELEMENT author (name,nation?)> <!ELEMENT author.name (#PCDATA)> <!ELEMENT nation (#PCDATA)> <!ELEMENT gift (item*)> <!ELEMENT item (#PCDATA)> /* #REQUIRED 代表属性不可缺省 ATTLIST 用于描述属性 CDATA 代表属性的数据类型为文本型 "*"代表子元素可以出现0到多次 "+"代表子元素可以出现1到多次 "?"代表子元素可以出现一次、也可以不出现 如果没有修饰,代表子元素必须出现1次。 */
dtdToXml.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books SYSTEM "demo.dtd"> <!-- <!DOCTYPE 根元素名 SYSTEM DTD文件路径--> <books> <book ISBN="5197-5742-5657"> <name>Java编程思想</name> <price>91.5</price> <authors> <author> <name>汤姆斯</name> <nation>美国</nation> </author> <author> <name>杰西姆</name> <nation>美国</nation> </author> </authors> <gift/> </book> <book ISBN="8795-4547-7519"> <name>深入浅出AJAX</name> <price>88.0</price> <authors> <author> <name>刘美美</name> <nation>中国</nation> </author> </authors> <gift> <item>主题T-shirt</item> <item>水杯</item> </gift> </book> </books>
2、使用SCHEMA验证XML
book.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="books"> <xs:complexType> <xs:sequence> <xs:element name="book" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name"/> <xs:element name="price"/> <xs:element name="authors"> <xs:complexType> <xs:sequence> <xs:element name="author" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name"/> <xs:element name="nation" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="gift" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="item" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="ISBN" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
schemaToXml.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd"> <book ISBN="5197-5742-5657"> <name>Java编程思想</name> <price>91.5</price> <authors> <author> <name>汤姆斯</name> <nation>美国</nation> </author> <author> <name>杰西姆</name> <nation>美国</nation> </author> </authors> <gift/> </book> <book ISBN="8795-4547-7519"> <name>深入浅出AJAX</name> <price>88.0</price> <authors> <author> <name>刘美美</name> <nation>中国</nation> </author> </authors> <gift> <item>主题T-shirt</item> <item>水杯</item> </gift> </book> </books> <!-- 1、若SCHEMA中没有指定目标命名空间(targetNamespace,可以在SCHEMA文件的根元素中指定),则在XML的根元素中通过noNamespaceSchemaLocation属性指定SCHEMA文件的位置,如下例: schema命名空间 schema文件位置 <books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd"> 2、若SCHEMA中指定了目标命名空间(如http://www.mySchema.com <targetNamespace="http://www.mySchema.com">),则在XML的根元素中通过schemaLocation属性指定SCHEMA文件的位置 目标命名空间+空格+schema文件位置 默认命名空间 <books xsi:schemaLocation="http://www.mySchema.com books.xsd" xmlns="http://www.mySchema.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -->
二、DOM解析XML与HTML
1、使用DOM解析XML
以dtdToXml.xml为例
<<<<script type="text/javascript"> var xmlDoc=xmlData.XMLDocument; //获取XML文档 var root=xmlDoc.documentElement; //根元素 var bookA=root.firstChild; //第一个book元素 var ISBNValue=bookA.getAttribute("ISBN"); //ISBN属性 alert('ISBN属性 ='+ISBNValue); var bookAChildren=bookA.childNodes; //book子元素 var name=bookAChildren[0]; //name元素 alert(name.nodeType); alert(name.nodeName); alert(name.nodeValue); var text=name.firstChild; //name中文本节点 alert(text.nodeType); alert(text.nodeName); alert(text.nodeValue); var authors=name.nextSibling.nextSibling; var authorName=authors.firstChild.firstChild.firstChild; alert('第一位作者姓名='+authorName.nodeValue); var bookB=root.lastChild; var bookBParent=bookB.parentNode; alert('是否为根元素='+(root==bookBParent)); /* * 从上例可以看出,按照结构层次进行DOM操作可以一层一层的读出XML文档中的所有内容,但是代码比较繁琐,如果需要快速定位元素, * 可以使用DOM提供的getElementsByTagName方法,根据标签名查找元素。 * 下例使用getElementsByTagName方法查找第一本书的信息: * */ var xmlDoc=xmlData.XMLDocument; var bookA=xmlDoc.getElementsByTagName("book")[0]; //获取所有名为book的元素 保留第一个 var name=bookA.getElementsByTagName("name")[0]; //获取第一本书的书名 var price=bookA.getElementsByTagName("price")[0]; var names=bookA.getElementsByTagName("authors")[0].getElementsByTagName("name"); //获取第一本书所有的作者名称 alert('书名='+name.firstChild.nodeValue); //读取文本内容 alert('价格='+price.firstChild.nodeValue); for(var i=0;i<names.length;i++){ alert('作者=:'+names[i].firstChild.nodeValue); } </script>
2、使用DOM解析HTML
<script type="text/javascript"> function demo(){ var inputs=document.getElementsByTagName('input'); //document为文本对象 alert('<INPUT>元素数量='+inputs.length); var checkboxes=document.getElementsByName('check'); for(var i=0;i<checkboxes.length;i++){ alert(checkboxes[i].getAttribute('value')); //获取复选框的属性值 } } </script> <body onload="demo();"> <form name="f"> 输入框:<input type="text" value="tom"/><br/> 多选框:<input type="checkbox" name="check" value="1"/> <input type="checkbox" name="check" value="2"> </form> </body>
例1:
使用DOM中的方法在HTML页面上创建一个2x2表格
<script type="text/javascript"> function demo(){ var body=document.documentElement.lastChild; //获取body的对象 var table=document.createElement("TABLE"); //必须通过document对象创建元素 var tbody=document.createElement("TBODY"); var tr=document.createElement("TR"); var tdA=document.createElement("TD"); var tdAtext=document.createTextNode("单元A"); tdA.appendChild(tdAtext); //子节点必须追加到父节点中 var tdB=tdA.cloneNode(true); //复制单元格 tdB.firstChild.nodeValue="单元B"; //修改单元格的文本值 tr.appendChild(tdA); tr.appendChild(tdB); tbody.appendChild(tr); tbody.appendChild(tr.cloneNode(true)); table.appendChild(tbody); table.setAttribute("border",1); //修改边框属性 body.appendChild(table); //必须将表格附加在body中才能在页面显示 </script>
例2:
制作一个具有动态效果的例子:实现商品选择功能,使用者点击“未选中的商品”栏中的商品图片后,将图片移至“选中的商品”栏中,反之亦然。
<script type="text/javascript"> function init(){ //将10张图片放大未选中商品栏 var unSle=document.getElementById("unSelect"); for(var i=1;i<=10;i++){ var img=document.createElement('IMG'); img.setAttribute("src","imgs/"+i+".png"); //为图片增加点击事件,img_onclick为方法名 img.setAttribute("onclick",img_onclick); unSle.appendChild(img); } } //图片的事件处理方法 function img_onclick(){ var unSel=document.getElementById("unSelect"); var sel=document.getElementById("selected"); //判断当前被点击图片的父节点是哪一个 if(this.parentNode == unSel){ //如果父节点是入"未选中商品栏",则将图片移至"选中商品栏" sel.appendChild(this); }else{ unSel.appendChild(this); } } </script> <body onload="init();"> <h3>未选中的商品</h3> <div id="unSelect"></div> <h3>选中的商品</h3> <div id="selected"></div> </body>
三、JDOM
1、JAXP对XML的操作
emps.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <emps> <emp empId="1"> <name>张三</name> <sex>男</sex> <telephone>1351234567</telephone> <birthday>1986-04-16T00:00:00+08:00</birthday> <dept>培训部</dept> <favs>足球,篮球</favs> </emp> <emp empId="2"> <name>小美</name> <sex>女</sex> <telephone>1359874561</telephone> <birthday>1989-11-12T00:00:00+08:00</birthday> <dept>市场部</dept> <favs>音乐,电影</favs> </emp> </emps>
JaxpToXml.java
package test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.omg.PortableInterceptor.AdapterStateHelper; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * jaxp对xml的操作 * @author Administrator * */ public class JaxpToXml { //案例:对上面xml文件进行dom解析,修改empId=2的联系电话,并添加阿聪的信息。 public static void main(String[] args) { DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder=builderFactory.newDocumentBuilder(); //获取Document对象。 Document doc=builder.parse(new File("src/test/emps.xml")); //document. getDocumentElement():获取XML文件的根节点,也就是DOM的根节点。 Element root=doc.getDocumentElement(); NodeList empList=root.getChildNodes(); for(int i=0;i<empList.getLength();i++){ //由于xml文件是格式化的,带有空格和回车换行符,JAXP把这些字符也解析为一个文本节点(CharacterData),此处在遍历XML文件的节点时,需要把Element元素检索出来。 if(!(empList.item(i) instanceof Element)){ continue; } Element emp=(Element) empList.item(i); //emp.getAttribute("empId")就是获取emp节点的empId属性。 if(!"2".equals(emp.getAttribute("empId"))){ continue; } NodeList nodeList=emp.getChildNodes(); for(int j=0;j<nodeList.getLength();j++){ if(!(nodeList.item(j) instanceof Element)){ continue; } Element element=(Element) nodeList.item(j); System.out.println(element.getFirstChild()); //getNodeName()和getNodeValue()能够获取节点的名称和值,在元素节点中,nodeName就是元素的标签名称,nodeValue没有意义,在文本节点中,nodeValue就是节点的文本,nodeName没有意义,在属性节点中nodeName和nodeValue分别代表属性的名称和属性的值。 if(element.getNodeName().equals("telephone")){ //element.setTextContent("文本"),为元素节点添加文本子节点。 element.setTextContent("13636732076"); break; } } } //document.createElement("节点名称"),根据指定的节点名称创建一个元素节点。 Element acong=doc.createElement("emp"); acong.setAttribute("empId", "3"); Element name = doc.createElement("name"); name.setTextContent("阿聪"); Element sex = doc.createElement("sex"); sex.setTextContent("男"); Element tel=doc.createElement("telphone"); tel.setTextContent("13120552106"); Element birthday=doc.createElement("birthday"); birthday.setTextContent("1986-11-12"); Element favs=doc.createElement("favs"); favs.setTextContent("足球,美术"); //element.appendChild(子节点),在一个元素节点的子节点列表最后,追加一个子节点。 acong.appendChild(name); acong.appendChild(sex); acong.appendChild(tel); acong.appendChild(birthday); acong.appendChild(favs); //在根节点最后添加子节点。 root.appendChild(acong); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2、JDOM对XML的操作
JdomToXml.java
package test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * JDOM对xml的操作 (需要jdom.jar) * @author Administrator * */ public class JdomToXml { public static void main(String[] args) { /* * 获取SAX解析器,在JDOM中可以使用SAX解析器对XML进行解析、也可以使用DOM解析器进行解析, * 解析的结果都会生成一棵节点树(Document对象),由JDOM进行维护,SAX解析器解析速度比DOM解析器快。 * 由于JDOM生成的节点树与W3C的DOM无关,因此普遍使用SAX解析器对XML进行解析。 * */ SAXBuilder builder=new SAXBuilder(); File xmlFile=new File("src/test/emps.xml"); try { //解析器的build(File)方法可以根据一个xml文件解析出Document对象。 Document doc=builder.build(xmlFile); //Document对象的getRootElement()方法得到根节点。 Element root=doc.getRootElement(); //getChildred()方法可以获取某元素节点下的所有子节点。 List<Element> list=root.getChildren(); for(Element element:list){ if("2".equals(element.getAttributeValue("empId"))){ //setText(text)方法可以设置某元素的文本值 element.getChild("telephone").setText("13100000000"); break; } } //创建新元素 Element emp=new Element("emp"); emp.setAttribute("empId", "3"); Element name=new Element("name"); name.setText("阿聪"); //添加子节点。可以把创建子节点、设置子节点、添加子节点三个操作同时操作 emp.addContent(name); emp.addContent(new Element("sex").setText("男")); emp.addContent(new Element("telephone").setText("13222222222")); emp.addContent(new Element("birthday").setText("1988-01-01")); emp.addContent(new Element("favs").setText("音乐,美术")); root.addContent(emp); //创建一个输出器 XMLOutputter xmlPutter=new XMLOutputter(); //设置输出格式是友好格式(带换行、缩紧的格式),默认格式是紧凑格式 xmlPutter.setFormat(Format.getPrettyFormat()); //Documen输出 xmlPutter.output(doc, new FileOutputStream(xmlFile)); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3、XPath
bookstore.xml
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> </bookstore>
JdomXPathToXml.java
package test; import java.io.File; import java.io.IOException; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; /** * jdom的XPath方式对xml的操作(需要jaxen.jar,jdom.jar) * @author Administrator * */ public class JdomXPathToXml { /* * 案例:用JDom解析上面xml文件,找出book节点category属性的值为WEB的节点的作者信息, * 使用的XPath表达式为:/bookstore/book[@category='WEB']/author * */ public static void main(String[] args) { SAXBuilder builder=new SAXBuilder(); try { File xmlFile=new File("src/test/bookstore.xml"); // File xmlFile=new File("e:/xml/bookstore.xml"); Document doc=builder.build(xmlFile); //生成一个XPath对象,该对象可以重复使用 XPath xpath=XPath.newInstance("/bookstore/book[@category='WEB']/author"); //使用XPath对象对XML进行查询 List list=xpath.selectNodes(doc); for(Object obj:list){ Element author=(Element)obj; System.out.println(author.getText()); } } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
- XML.rar (2.1 MB)
- 下载次数: 10
相关推荐
以下是关于Java操作XML相关JAR的一些关键知识点: 1. **DOM解析器**:Document Object Model (DOM) 是一种将XML文档加载到内存中的方法,形成一个树形结构,允许开发者遍历和修改文档。Java中常用的DOM解析库包括`...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。本文将深入探讨XML的基本概念、Java中解析...理解并掌握这些工具和方法,对于进行XML相关开发至关重要。
示例描述:本章介绍LINQ to XML相关技术和使用。 CreateSimpleXMLTree 演示通过XElement创建简单的XML树。 CreateAttributeElement 演示通过XElement创建具有属性的XML元素。 CreateSubElement 演示通过...
在给定的资源“XML相关参考书籍共8本电子书”中,你可以期待学习到以下关键知识点: 1. **XML基础**:了解XML的基本结构,包括元素、属性、注释、处理指令、实体和命名空间等。XML文档由元素构成,元素可以包含其他...
本资源"JSON-XML相关jar包"提供了处理这两种格式转换的Java库,便于在项目中灵活地进行数据格式间的互换。 1. JSON基础知识: - JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似...
下面将详细阐述XML相关技术和应用架构及其在金融行业的应用。 首先,为何XML(Why XML)存在,可以从其特点及应用领域来理解。XML的文本基础(text-based)和对国际语言字符集的支持使其成为跨平台、跨语言交换数据...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。本文将深入探讨XML的相关知识及其在...理解并熟练掌握这些知识,对于进行XML相关的编程工作至关重要。
这个压缩包“CMarkup操作Xml相关资料.rar”很可能包含了关于如何使用CMarkup库进行XML处理的教程、示例代码和文档。 在C++中,处理XML通常比在其他语言中更为复杂,因为C++没有内置的XML支持。CMarkup库就是为了...
XML相关基础知识集合XML相关基础知识集合XML相关基础知识集合XML相关基础知识集合
4. **XML轻松学习手册_files**、**如何生成XML数据_files**、**XML语法概述_files**:这些可能是与文档相关的辅助文件,如图片、样式表(CSS)或脚本(JavaScript),用于增强学习体验。 学习XML,不仅要理解其基本...
XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据。它被设计为具有自我描述性的,使得数据能够被...通过上述资源,开发者和信息工作者可以获取丰富的学习材料和实用工具,进一步提升XML相关技能。
在本项目中,我们主要探讨的是如何使用C#语言来操作XML文件,特别是利用.NET框架提供的原生XML类库。XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,常用于应用程序之间的数据交换。在C#...
XML相关API是指用于操作和处理XML文档的各种编程接口,如: - **DOM(Document Object Model)**:提供了一种树形结构来表示XML文档,可以用来遍历、修改和创建XML文档。 - **SAX(Simple API for XML)**:事件驱动...
XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的...无论你是软件开发者、数据管理员还是系统架构师,XML都是一个必不可少的工具,掌握XML的相关知识对于提升工作效率和保证数据质量至关重要。
**Pugixml详解:一个高效易用的XML解析库** 在编程中,XML(Extensible Markup Language)是一种被广泛使用的数据交换格式,特别是在...通过理解和掌握Pugixml,开发者可以更轻松地处理XML相关的任务,提高开发效率。
XML与XSLT(Extensible Stylesheet Language Transformations)紧密相关,XSLT用于转换XML文档的结构和格式,实现数据的呈现样式。通过XSLT,你可以将XML数据转化为HTML、PDF或其他格式,以满足不同的展示需求。 ...
这可能是某种特定的 XML 相关工具或组件的名称,但具体信息不足,无法给出详细解释。如果你有更多关于它的信息,可以提供更详细的解答。 总之,TinyXML 是一个强大的工具,使得在 C++ 中处理 XML 文档变得简单。...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件以及Web服务等场景。...通过熟悉并掌握这两个库的使用,可以大大提高开发效率,简化XML相关任务的实现。
XML(eXtensible Markup Language)是一种用于标记数据的语言,它在互联网上广泛应用于数据交换、配置文件和文档存储等领域。XML的设计目的是传输和存储数据,而非显示数据,与HTML不同,HTML主要用于显示数据。本...