- Java XML - Discussion
- Java XML - Useful Resources
- Java XML - Quick Guide
- Java XML - Questions and Answers
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- Java DOM4J Parser
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- Java XPath Parser
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- Java StAX Parser
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- JDOM XML Parser
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- Java SAX Parser
- Modify XML Document
- Create XML Document
- Query XML Document
- Parse XML Document
- Java DOM Parser
- Java XML Parsers
- Java XML Overview
- Java XML Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Java XML - Quick Guide
Java XML - Overview
What is XML?
XML是一种简单的文字语言,旨在以文字格式储存和运输数据。 它使用可扩展标记语言。 以下是XML的一些突出特征。
XML是一种标记语言。
XML是一种像超文本一样的标签语言。
XML标记不像超文本界定。
你们可以界定你们自己的主角,这就是为什么它被称作“精通的语言”。
XML标记设计为自我描述。
XML是W3C关于数据储存和数据转让的建议。
Example
<?xml version = "1.0"?> <Class> <Name>First</Name> <Sections> <Section> <Name>A</Name> <Students> <Student>Rohan</Student> <Student>Mohan</Student> <Student>Sohan</Student> <Student>Lapt</Student> <Student>Vinay</Student> </Students> </Section> <Section> <Name>B</Name> <Students> <Student>Robert</Student> <Student>Jupe</Student> <Student>Kape</Student> <Student>Michael</Student> </Students> </Section> </Sections> </Class>
Advantages
下面是XML提供的优势:
技术信息 作为平原,XML是独立的技术。 任何技术均可用于数据储存和数据传输目的。
<Extensible 在XML中,可以非常容易地创建和使用习俗标签。
Allow Vapdation——利用XSD、DTD和XML结构可以轻易验证。
Disadvantages
以下是使用XML的缺点:
Java XML - Parsers
XML 分类是指通过XML文件获取或修改数据。
What is XML Parser?
XML Parser为获取或修改XML文件中的数据提供了一种途径。 Java为XML文件提供了多种选择。 下面是各种类型的教区,通常用于教化XML文件。
Dom Parser——通过装上文件的全部内容并创建其完整的等级树木来保存XML文件。
SAX Parser - Parses an XML document on event-basedstarts. 未将完整文件上载到记忆中。
JDOM Parser - Parses an XML document in a similar manner to DOM parser but in an better way.
StAX Parser - Parses an XML document in similar manner to SAX parser but in a more effective way.
XPath Parser - Parses an XML document based on expression and is contributed with XSLT.
DOM4J Parser-A java Library to parse XML, XPath, and XSLT using Java Collections Framework. 它向OM、SAX和JAXP提供支持。
目前有日本宇宙航空研究开发公司和XSLTAP,以面向目标的方式处理XML教区。 我们在本理论的随后各章中详细阐述每个教区。
Java DOM Parser - Overview
文件目标模型是万维网集团的一项正式建议。 它界定了一个接口,使方案能够查阅和更新XML文件的风格、结构和内容。 支持人力部的XML教区实施这一接口。
When to Use?
您应使用DOM教区。
你们需要了解文件的结构。
你们需要将XML文件的某些部分移至周围(例如,你可能想确定某些内容)。
你们需要不止一次地利用XML文件中的信息。
What You Get?
当你把XML文件与DOM教区混为一谈时,你回到了包含你文件所有内容的树木结构。 人力部提供你可用来审查文件内容和结构的各种职能。
Advantages
OM是操纵文件结构的共同接口。 其设计目标之一是,为一名符合DOM要求的区长撰写的Java代码应投向任何其他符合DOM规定的区长,无需作任何修改。
DOM interfaces
人力部确定了几个 Java接口。 以下是最常见的接口:
Attr——表示某一要素的属性。
Common DOM methods
当你与OMD合作时,你经常使用几种方法。
Document.getDocumentElement() - 归还文件的内容。
Node.getFirstChild() - 返回第一名孩子。
Node.getLastChild() - 送回最后一名孩子。
Node.getNextSibpng()- 这些方法使下一批Node的兄弟返回。
Node.getPreviousSibpng(- 这些方法使先前的某个 No子的兄弟们返回。
NogetAttribute(attrName) 某名Node将遗属按要求的名称归还。
Java DOM Parser - Parse XML Document
Steps to Using JDOM
下面是使用JDOM Parser的文件分发所使用的步骤。
与进口XML有关的包裹。
Create a DocumentBuilder
Create a Document from a file or stream
Extract the root element
Examine attributes
Examine sub-elements
Import XML-related packages
import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*;
Create a DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
Create a Document from a file or stream
StringBuilder xmlStringBuilder = new StringBuilder(); xmlStringBuilder.append("<?xml version="1.0"?>"); ByteArrayInputStream input = new ByteArrayInputStream( xmlStringBuilder.toString().getBytes("UTF-8")); Document doc = builder.parse(input);
Extract the root element
Element root = document.getDocumentElement();
Examine attributes
//returns specific attribute getAttribute("attributeName"); //returns a Map (table) of names/values getAttributes();
Examine sub-elements
//returns a pst of subelements of specified name getElementsByTagName("subelementName"); //returns a pst of all child nodes getChildNodes();
Demo Example
这里我们需要的是投入xml文档——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
DomParserDemo.java
package com.tutorialspoint.xml; import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; pubpc class DomParserDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normapze(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("student"); System.out.println("----------------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println(" Current Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no : " + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement .getElementsByTagName("firstname") .item(0) .getTextContent()); System.out.println("Last Name : " + eElement .getElementsByTagName("lastname") .item(0) .getTextContent()); System.out.println("Nick Name : " + eElement .getElementsByTagName("nickname") .item(0) .getTextContent()); System.out.println("Marks : " + eElement .getElementsByTagName("marks") .item(0) .getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } }
这将产生以下结果:
Root element :class ---------------------------- Current Element :student Student roll no : 393 First Name : dinkar Last Name : kad Nick Name : dinkar Marks : 85 Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta Nick Name : vinni Marks : 95 Current Element :student Student roll no : 593 First Name : jasvir Last Name : singn Nick Name : jazz Marks : 90
Java DOM Parser - Query XML Document
Demo Example
在这方面,我们需要问询的Xml文件——
<?xml version = "1.0"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferarri 101</carname> <carname type = "sports car">Ferarri 201</carname> <carname type = "sports car">Ferarri 301</carname> </supercars> <supercars company = "Lamborgini"> <carname>Lamborgini 001</carname> <carname>Lamborgini 002</carname> <carname>Lamborgini 003</carname> </supercars> <luxurycars company = "Benteley"> <carname>Benteley 1</carname> <carname>Benteley 2</carname> <carname>Benteley 3</carname> </luxurycars> </cars>
QueryXmlFileDemo.java
package com.tutorialspoint.xml; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; pubpc class QueryXmlFileDemo { pubpc static void main(String argv[]) { try { File inputFile = new File("input.txt"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normapze(); System.out.print("Root element: "); System.out.println(doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("supercars"); System.out.println("----------------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println(" Current Element :"); System.out.print(nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.print("company : "); System.out.println(eElement.getAttribute("company")); NodeList carNameList = eElement.getElementsByTagName("carname"); for (int count = 0; count < carNameList.getLength(); count++) { Node node1 = carNameList.item(count); if (node1.getNodeType() == node1.ELEMENT_NODE) { Element car = (Element) node1; System.out.print("car name : "); System.out.println(car.getTextContent()); System.out.print("car type : "); System.out.println(car.getAttribute("type")); } } } } } catch (Exception e) { e.printStackTrace(); } } }
这将产生以下结果:
Root element: cars ---------------------------- Current Element : supercarscompany : Ferrari car name : Ferarri 101 car type : formula one car name : Ferarri 201 car type : sports car car name : Ferarri 301 car type : sports car Current Element : supercarscompany : Lamborgini car name : Lamborgini 001 car type : car name : Lamborgini 002 car type : car name : Lamborgini 003 car type :
Java DOM Parser - Create XML Document
Demo Example
在这方面,我们需要建立——
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> </cars>
CreateXmlFileDemo.java
package com.tutorialspoint.xml; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.io.File; pubpc class CreateXmlFileDemo { pubpc static void main(String argv[]) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.newDocument(); // root element Element rootElement = doc.createElement("cars"); doc.appendChild(rootElement); // supercars element Element supercar = doc.createElement("supercars"); rootElement.appendChild(supercar); // setting attribute to element Attr attr = doc.createAttribute("company"); attr.setValue("Ferrari"); supercar.setAttributeNode(attr); // carname element Element carname = doc.createElement("carname"); Attr attrType = doc.createAttribute("type"); attrType.setValue("formula one"); carname.setAttributeNode(attrType); carname.appendChild(doc.createTextNode("Ferrari 101")); supercar.appendChild(carname); Element carname1 = doc.createElement("carname"); Attr attrType1 = doc.createAttribute("type"); attrType1.setValue("sports"); carname1.setAttributeNode(attrType1); carname1.appendChild(doc.createTextNode("Ferrari 202")); supercar.appendChild(carname1); // write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("C:\cars.xml")); transformer.transform(source, result); // Output to console for testing StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult); } catch (Exception e) { e.printStackTrace(); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> </cars>
Java DOM Parser - Modify XML Document
Demo Example
这里是我们需要修改的投入xml文件——
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> <luxurycars company = "Benteley"> <carname>Benteley 1</carname> <carname>Benteley 2</carname> <carname>Benteley 3</carname> </luxurycars> </cars>
ModifyXmlFileDemo.java
package com.tutorialspoint.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; pubpc class ModifyXmlFileDemo { pubpc static void main(String argv[]) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.parse(inputFile); Node cars = doc.getFirstChild(); Node supercar = doc.getElementsByTagName("supercars").item(0); // update supercar attribute NamedNodeMap attr = supercar.getAttributes(); Node nodeAttr = attr.getNamedItem("company"); nodeAttr.setTextContent("Lamborigini"); // loop the supercar child node NodeList pst = supercar.getChildNodes(); for (int temp = 0; temp < pst.getLength(); temp++) { Node node = pst.item(temp); if (node.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) node; if ("carname".equals(eElement.getNodeName())) { if("Ferrari 101".equals(eElement.getTextContent())) { eElement.setTextContent("Lamborigini 001"); } if("Ferrari 202".equals(eElement.getTextContent())) eElement.setTextContent("Lamborigini 002"); } } } NodeList childNodes = cars.getChildNodes(); for(int count = 0; count < childNodes.getLength(); count++) { Node node = childNodes.item(count); if("luxurycars".equals(node.getNodeName())) cars.removeChild(node); } // write the content on console TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); System.out.println("-----------Modified File-----------"); StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult); } catch (Exception e) { e.printStackTrace(); } } }
这将产生以下结果:
-----------Modified File----------- <?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Lamborigini"> <carname type = "formula one">Lamborigini 001</carname> <carname type = "sports">Lamborigini 002</carname> </supercars> </cars>
Java SAX Parser - Overview
SAX(XML的Simple AP)是XML文件的一个基于活动的内容。 与DOM教区不同的是,SAX教区没有树木。 空间研培中心是XML的一个流层接口,这意味着使用空间研培中心的申请会收到关于正在处理XML文件的内容的事件通知,并在从文件顶点开始的顺序顺序顺序顺序排列,最后是关闭了ROOT部分。
阅读XML文件,从上到下,承认构成一份内容翔实的XML文件的证据。
标注的处理方式与文件中出现的顺序相同。
报告申请方案,说明当出现时,教区遇到的症状的性质。
申请方案提供“发明”手工艺品,必须登记在教区。
由于标的物已经确定,手里的回击方法在相关信息中被援引。
When to Use?
你们应当使用SAX的一个教区。
您能够从上至下地处理XML文件。
该文件没有被深刻推崇。
你正在处理一份非常庞大的XML文件,其DOM树将消耗太多的记忆。 典型的多功能性照相器使用十 by,以代表XML的一种。
有待解决的问题仅涉及XML文件的一部分。
各州一旦看到数据,就可提供数据,因此,国家情报和安全局为从上游抵达的XML文件开展工作。
Disadvantages of SAX
我们无法随意查阅XML文件,因为该文件仅以前瞻性方式处理。
如果你需要跟踪主食所看到的数据或改变项目顺序,你必须写法,并自行储存数据。
ContentHandler Interface
该接口具体说明了SAX教区用来通知其所看到的XML文件各组成部分的申请程序的反馈方法。
避免开端文件——在文件的开头呼吁。
避免最终文件-在文件结尾处要求查阅。
删除 Element(String uri, String localName,String qName)——呼唤在要素结束时。
避免特性([] ch,tstart, int length)——在遇到特性数据时要求使用。
避免处理 指示(指标,强力数据)——在确认处理指示时发出。
避免设置文件处理器(定位器)——提供可用来确定文件所载立场的定位器。
避免终端设计(设计前)——在名称空间定义终止其范围时使用。
Attributes Interface
这一接口具体规定了处理某一要素相关特性的方法。
int RecLength()——属性数目。
String RecQName(int Index)
String RecValue(int index)
Java SAX Parser - Parse XML Document
Demo Example
在这方面,我们需要编织的投入xml文件——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
UserHandler.java
package com.tutorialspoint.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; pubpc class UserHandler extends DefaultHandler { boolean bFirstName = false; boolean bLastName = false; boolean bNickName = false; boolean bMarks = false; @Override pubpc void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("student")) { String rollNo = attributes.getValue("rollno"); System.out.println("Roll No : " + rollNo); } else if (qName.equalsIgnoreCase("firstname")) { bFirstName = true; } else if (qName.equalsIgnoreCase("lastname")) { bLastName = true; } else if (qName.equalsIgnoreCase("nickname")) { bNickName = true; } else if (qName.equalsIgnoreCase("marks")) { bMarks = true; } } @Override pubpc void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("student")) { System.out.println("End Element :" + qName); } } @Override pubpc void characters(char ch[], int start, int length) throws SAXException { if (bFirstName) { System.out.println("First Name: " + new String(ch, start, length)); bFirstName = false; } else if (bLastName) { System.out.println("Last Name: " + new String(ch, start, length)); bLastName = false; } else if (bNickName) { System.out.println("Nick Name: " + new String(ch, start, length)); bNickName = false; } else if (bMarks) { System.out.println("Marks: " + new String(ch, start, length)); bMarks = false; } } }
SAXParserDemo.java
package com.tutorialspoint.xml; import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; pubpc class SAXParserDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); UserHandler userhandler = new UserHandler(); saxParser.parse(inputFile, userhandler); } catch (Exception e) { e.printStackTrace(); } } } class UserHandler extends DefaultHandler { boolean bFirstName = false; boolean bLastName = false; boolean bNickName = false; boolean bMarks = false; @Override pubpc void startElement( String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("student")) { String rollNo = attributes.getValue("rollno"); System.out.println("Roll No : " + rollNo); } else if (qName.equalsIgnoreCase("firstname")) { bFirstName = true; } else if (qName.equalsIgnoreCase("lastname")) { bLastName = true; } else if (qName.equalsIgnoreCase("nickname")) { bNickName = true; } else if (qName.equalsIgnoreCase("marks")) { bMarks = true; } } @Override pubpc void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("student")) { System.out.println("End Element :" + qName); } } @Override pubpc void characters(char ch[], int start, int length) throws SAXException { if (bFirstName) { System.out.println("First Name: " + new String(ch, start, length)); bFirstName = false; } else if (bLastName) { System.out.println("Last Name: " + new String(ch, start, length)); bLastName = false; } else if (bNickName) { System.out.println("Nick Name: " + new String(ch, start, length)); bNickName = false; } else if (bMarks) { System.out.println("Marks: " + new String(ch, start, length)); bMarks = false; } } }
这将产生以下结果:
Roll No : 393 First Name: dinkar Last Name: kad Nick Name: dinkar Marks: 85 End Element :student Roll No : 493 First Name: Vaneet Last Name: Gupta Nick Name: vinni Marks: 95 End Element :student Roll No : 593 First Name: jasvir Last Name: singn Nick Name: jazz Marks: 90 End Element :student
Java SAX Parser - Query XML Document
Demo Example
这里需要的是投入文本文件,以便滚动:393
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
UserHandler.java
package com.tutorialspoint.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; pubpc class UserHandler extends DefaultHandler { boolean bFirstName = false; boolean bLastName = false; boolean bNickName = false; boolean bMarks = false; String rollNo = null; @Override pubpc void startElement( String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("student")) { rollNo = attributes.getValue("rollno"); } if(("393").equals(rollNo) && qName.equalsIgnoreCase("student")) { System.out.println("Start Element :" + qName); } if (qName.equalsIgnoreCase("firstname")) { bFirstName = true; } else if (qName.equalsIgnoreCase("lastname")) { bLastName = true; } else if (qName.equalsIgnoreCase("nickname")) { bNickName = true; } else if (qName.equalsIgnoreCase("marks")) { bMarks = true; } } @Override pubpc void endElement( String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("student")) { if(("393").equals(rollNo) && qName.equalsIgnoreCase("student")) System.out.println("End Element :" + qName); } } @Override pubpc void characters(char ch[], int start, int length) throws SAXException { if (bFirstName && ("393").equals(rollNo)) { //age element, set Employee age System.out.println("First Name: " + new String(ch, start, length)); bFirstName = false; } else if (bLastName && ("393").equals(rollNo)) { System.out.println("Last Name: " + new String(ch, start, length)); bLastName = false; } else if (bNickName && ("393").equals(rollNo)) { System.out.println("Nick Name: " + new String(ch, start, length)); bNickName = false; } else if (bMarks && ("393").equals(rollNo)) { System.out.println("Marks: " + new String(ch, start, length)); bMarks = false; } } }
SAXQueryDemo.java
package com.tutorialspoint.xml; import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; pubpc class SAXQueryDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); UserHandler userhandler = new UserHandler(); saxParser.parse(inputFile, userhandler); } catch (Exception e) { e.printStackTrace(); } } } class UserHandler extends DefaultHandler { boolean bFirstName = false; boolean bLastName = false; boolean bNickName = false; boolean bMarks = false; String rollNo = null; @Override pubpc void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("student")) { rollNo = attributes.getValue("rollno"); } if(("393").equals(rollNo) && qName.equalsIgnoreCase("student")) { System.out.println("Start Element :" + qName); } if (qName.equalsIgnoreCase("firstname")) { bFirstName = true; } else if (qName.equalsIgnoreCase("lastname")) { bLastName = true; } else if (qName.equalsIgnoreCase("nickname")) { bNickName = true; } else if (qName.equalsIgnoreCase("marks")) { bMarks = true; } } @Override pubpc void endElement( String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("student")) { if(("393").equals(rollNo) && qName.equalsIgnoreCase("student")) System.out.println("End Element :" + qName); } } @Override pubpc void characters( char ch[], int start, int length) throws SAXException { if (bFirstName && ("393").equals(rollNo)) { //age element, set Employee age System.out.println("First Name: " + new String(ch, start, length)); bFirstName = false; } else if (bLastName && ("393").equals(rollNo)) { System.out.println("Last Name: " + new String(ch, start, length)); bLastName = false; } else if (bNickName && ("393").equals(rollNo)) { System.out.println("Nick Name: " + new String(ch, start, length)); bNickName = false; } else if (bMarks && ("393").equals(rollNo)) { System.out.println("Marks: " + new String(ch, start, length)); bMarks = false; } } }
这将产生以下结果:
Start Element :student First Name: dinkar Last Name: kad Nick Name: dinkar Marks: 85 End Element :student
Java SAX Parser - Create XML Document
最好使用安特遣部队的教区来制作XML文件,而不是使用安特遣部队的教区。 请参看Java StAX Parser部分。
Java SAX Parser - Modify XML Document
Demo Example
这里是投入的XML文件,我们需要通过电传和带、Result>、Pas<、Result/>、“末”、/marks>、标签加以修改。
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
SAXModifyDemo.java
package com.tutorialspoint.xml; import java.io.*; import org.xml.sax.*; import javax.xml.parsers.*; import org.xml.sax.helpers.DefaultHandler; pubpc class SAXModifyDemo extends DefaultHandler { static String displayText[] = new String[1000]; static int numberLines = 0; static String indentation = ""; pubpc static void main(String args[]) { try { File inputFile = new File("input.txt"); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXModifyDemo obj = new SAXModifyDemo(); obj.childLoop(inputFile); FileWriter filewriter = new FileWriter("newfile.xml"); for(int loopIndex = 0; loopIndex < numberLines; loopIndex++) { filewriter.write(displayText[loopIndex].toCharArray()); filewriter.write( ); System.out.println(displayText[loopIndex].toString()); } filewriter.close(); } catch (Exception e) { e.printStackTrace(System.err); } } pubpc void childLoop(File input) { DefaultHandler handler = this; SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse(input, handler); } catch (Throwable t) {} } pubpc void startDocument() { displayText[numberLines] = indentation; displayText[numberLines] += "<?xml version = "1.0" encoding = ""+ "UTF-8" + ""?>"; numberLines++; } pubpc void processingInstruction(String target, String data) { displayText[numberLines] = indentation; displayText[numberLines] += "<?"; displayText[numberLines] += target; if (data != null && data.length() > 0) { displayText[numberLines] += ; displayText[numberLines] += data; } displayText[numberLines] += "?>"; numberLines++; } pubpc void startElement(String uri, String localName, String quapfiedName, Attributes attributes) { displayText[numberLines] = indentation; indentation += " "; displayText[numberLines] += < ; displayText[numberLines] += quapfiedName; if (attributes != null) { int numberAttributes = attributes.getLength(); for (int loopIndex = 0; loopIndex < numberAttributes; loopIndex++) { displayText[numberLines] += ; displayText[numberLines] += attributes.getQName(loopIndex); displayText[numberLines] += "=""; displayText[numberLines] += attributes.getValue(loopIndex); displayText[numberLines] += " ; } } displayText[numberLines] += > ; numberLines++; } pubpc void characters(char characters[], int start, int length) { String characterData = (new String(characters, start, length)).trim(); if(characterData.indexOf(" ") < 0 && characterData.length() > 0) { displayText[numberLines] = indentation; displayText[numberLines] += characterData; numberLines++; } } pubpc void endElement(String uri, String localName, String quapfiedName) { indentation = indentation.substring(0, indentation.length() - 4) ; displayText[numberLines] = indentation; displayText[numberLines] += "</"; displayText[numberLines] += quapfiedName; displayText[numberLines] += > ; numberLines++; if (quapfiedName.equals("marks")) { startElement("", "Result", "Result", null); characters("Pass".toCharArray(), 0, "Pass".length()); endElement("", "Result", "Result"); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8"?> <class> <student rollno = "393"> <firstname> dinkar </firstname> <lastname> kad </lastname> <nickname> dinkar </nickname> <marks> 85 </marks> <Result> Pass </Result> </student> <student rollno = "493"> <firstname> Vaneet </firstname> <lastname> Gupta </lastname> <nickname> vinni </nickname> <marks> 95 </marks> <Result> Pass </Result> </student> <student rollno = "593"> <firstname> jasvir </firstname> <lastname> singn </lastname> <nickname> jazz </nickname> <marks> 90 </marks> <Result> Pass </Result> </student> </class>
Java JDOM Parser - Overview
JDOM是一个开放源,设在 Java的图书馆,可以查阅XML文件。 通常是 Java开发商友好的促销器。 它是 optimize优化的,它使用诸如名单和阿雷拉等垃圾收集。
JDOM与DOM和SAX AP公司合作,将两者的最佳部分结合起来。 它的记忆足迹很低,几乎像安特遣部队一样快。
Environment Setup
为了使用JDOM教区,你应该 j。 页: 1
package com.tutorialspoint.xml; import java.io.IOException; import java.io.StringWriter; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; pubpc class StAXCreateXMLDemo { pubpc static void main(String[] args) { try { StringWriter stringWriter = new StringWriter(); XMLOutputFactory xMLOutputFactory = XMLOutputFactory.newInstance(); XMLStreamWriter xMLStreamWriter = xMLOutputFactory.createXMLStreamWriter(stringWriter); xMLStreamWriter.writeStartDocument(); xMLStreamWriter.writeStartElement("cars"); xMLStreamWriter.writeStartElement("supercars"); xMLStreamWriter.writeAttribute("company", "Ferrari"); xMLStreamWriter.writeStartElement("carname"); xMLStreamWriter.writeAttribute("type", "formula one"); xMLStreamWriter.writeCharacters("Ferrari 101"); xMLStreamWriter.writeEndElement(); xMLStreamWriter.writeStartElement("carname"); xMLStreamWriter.writeAttribute("type", "sports"); xMLStreamWriter.writeCharacters("Ferrari 202"); xMLStreamWriter.writeEndElement(); xMLStreamWriter.writeEndElement(); xMLStreamWriter.writeEndDocument(); xMLStreamWriter.flush(); xMLStreamWriter.close(); String xmlString = stringWriter.getBuffer().toString(); stringWriter.close(); System.out.println(xmlString); } catch (XMLStreamException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> </cars>
Java StAX Parser - Modify XML Document
Demo Example
在这方面,我们需要修改的《锡马法》——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singh</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
StAXModifyDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; pubpc class StAXModifyDemo { pubpc static void main(String[] args) { try { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader eventReader = factory.createXMLEventReader( new FileReader("input.txt")); SAXBuilder saxBuilder = new SAXBuilder(); Document document = saxBuilder.build(new File("input.txt")); Element rootElement = document.getRootElement(); List<Element> studentElements = rootElement.getChildren("student"); while(eventReader.hasNext()) { XMLEvent event = eventReader.nextEvent(); switch(event.getEventType()) { case XMLStreamConstants.START_ELEMENT: StartElement startElement = event.asStartElement(); String qName = startElement.getName().getLocalPart(); if (qName.equalsIgnoreCase("student")) { Iterator<Attribute> attributes = startElement.getAttributes(); String rollNo = attributes.next().getValue(); if(rollNo.equalsIgnoreCase("393")) { //get the student with roll no 393 for(int i = 0;i < studentElements.size();i++) { Element studentElement = studentElements.get(i); if(studentElement.getAttribute( "rollno").getValue().equalsIgnoreCase("393")) { studentElement.removeChild("marks"); studentElement.addContent(new Element("marks").setText("80")); } } } } break; } } XMLOutputter xmlOutput = new XMLOutputter(); // display xml xmlOutput.setFormat(Format.getPrettyFormat()); xmlOutput.output(document, System.out); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (XMLStreamException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8"?> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>80</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singh</lastname> <nickname>jazz</nickname> <marks>90</marks> </student>
Java XPath Parser - Overview
XPath是万维网集团的一项正式建议。 它界定了在XML档案中查找信息的语文。 它被用于掩盖XML文件的内容和属性。 XPath提供了各种表达方式,可用于查询XML文件的相关信息。
What is XPath?
结构定义——XPath界定了XML文件的某些部分,如内容、属性、文字、名称空间、处理、评论和文件节点。
XSLT的Major part of XSLT> - XPath is one of the main elements in XSLT standard and one must have sufficient knowledge of XPath in order to work with XSLT documents.
W3C建议-XP>世界大不列颠及北爱尔兰联合王(W3C)的正式建议。
XPath Expressions
XPath使用一条途径,从XML文件中挑选节点或节点清单。 以下是从XML文件中选择任何节点/节点清单的有用途径和表述清单。
Sr.No. | Expression & Description |
---|---|
1 | 用特定名称选择所有节点 |
2 | 遴选从深层节点开始 |
3 | www.un.org/Depts/DGACM/index_spanish.htm 甄选从目前与甄选相吻合的节点开始。 |
4 | <>。 选择目前的节点 |
5 | <>。 选择目前的代号的母子 |
6 | 选择属性 |
7 | <student <>Example——用“student”名称选择所有节点 |
8 | Example- 选择所有属于班级子女的学生 |
9 | 选择所有学生,不论他们是否在文件中 |
Predicates
具体指标用于寻找含有特定价值的具体节点或节点,并以[...]加以界定。
Expression | Result |
---|---|
/class/student[1] | Selects the first student element that is the child of the class element. |
/class/student[last()] | Selects the last student element that is the child of the class element. |
/class/student[last()-1] | Selects the last but one student element that is the child of the class element. |
//student[@rollno = 493 ] | Selects all the student elements that have an attribute named rollno with a value of 493 |
Java XPath Parser - Parse XML Document
Steps to Using XPath
下面是使用XPath Parser文件时所用的步骤。
与进口XML有关的包裹。
编制文件。
从档案或档案中生成文件。
• 制作Xpath物体和XPath路标语。
Compile the XPath expression using XPath.compile() 通过XPath.evaluate()对汇编的表述进行评价,并获得一份节点清单。
页: 1
检查属性。
Examine sub-elements.
Import XML-related packages
import org.w3c.dom.*; import org.xml.sax.*; import javax.xml.parsers.*; import javax.xml.xpath.*; import java.io.*;
Create a DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
Create a Document from a file or stream
StringBuilder xmlStringBuilder = new StringBuilder(); xmlStringBuilder.append("<?xml version = "1.0"?> <class> </class>"); ByteArrayInputStream input = new ByteArrayInputStream( xmlStringBuilder.toString().getBytes("UTF-8")); Document doc = builder.parse(input);
Build XPath
XPath xPath = XPathFactory.newInstance().newXPath();
Prepare Path expression and evaluate it
String expression = "/class/student"; NodeList nodeList = (NodeList) xPath.compile(expression).evaluate( doc, XPathConstants.NODESET);
Iterate over NodeList
for (int i = 0; i < nodeList.getLength(); i++) { Node nNode = nodeList.item(i); ... }
Examine attributes
//returns specific attribute getAttribute("attributeName"); //returns a Map (table) of names/values getAttributes();
Examine sub-elements
//returns a pst of subelements of specified name getElementsByTagName("subelementName"); //returns a pst of all child nodes getChildNodes();
Demo Example
这里,我们需要的是投入文件,即:
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singh</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
XPathParserDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import org.xml.sax.SAXException; pubpc class XPathParserDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normapze(); XPath xPath = XPathFactory.newInstance().newXPath(); String expression = "/class/student"; NodeList nodeList = (NodeList) xPath.compile(expression).evaluate( doc, XPathConstants.NODESET); for (int i = 0; i < nodeList.getLength(); i++) { Node nNode = nodeList.item(i); System.out.println(" Current Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no :" + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement .getElementsByTagName("firstname") .item(0) .getTextContent()); System.out.println("Last Name : " + eElement .getElementsByTagName("lastname") .item(0) .getTextContent()); System.out.println("Nick Name : " + eElement .getElementsByTagName("nickname") .item(0) .getTextContent()); System.out.println("Marks : " + eElement .getElementsByTagName("marks") .item(0) .getTextContent()); } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } } }
这将产生以下结果:
Current Element :student Student roll no : 393 First Name : dinkar Last Name : kad Nick Name : dinkar Marks : 85 Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta Nick Name : vinni Marks : 95 Current Element :student Student roll no : 593 First Name : jasvir Last Name : singh Nick Name : jazz Marks : 90
Java XPath Parser - Query XML Document
Demo Example
在此,我们需要问询的投入文本文件——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
XPathParserDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import org.xml.sax.SAXException; pubpc class XPathParserDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normapze(); XPath xPath = XPathFactory.newInstance().newXPath(); String expression = "/class/student[@rollno = 493 ]"; NodeList nodeList = (NodeList) xPath.compile(expression).evaluate( doc, XPathConstants.NODESET); for (int i = 0; i < nodeList.getLength(); i++) { Node nNode = nodeList.item(i); System.out.println(" Current Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no : " + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement .getElementsByTagName("firstname") .item(0) .getTextContent()); System.out.println("Last Name : " + eElement .getElementsByTagName("lastname") .item(0) .getTextContent()); System.out.println("Nick Name : " + eElement .getElementsByTagName("nickname") .item(0) .getTextContent()); System.out.println("Marks : " + eElement .getElementsByTagName("marks") .item(0) .getTextContent()); } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } } }
这将产生以下结果:
Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta Nick Name : vinni Marks : 95
Java XPath Parser - Create XML Document
XPath parser is used to navigate XML Documents only. 最好利用DOM教区创建XML。 请参看Java DOM Parser部分。
Java XPath Parser - Modify XML Document
XPath parser is used to navigate XML Documents only. 最好利用DOM教区修改XML。 请参看Java DOM Parser部分。
Java DOM4J Parser - Overview
DOM4J是一家开放的资料来源,设在 Java的图书馆,以提供XML文件。 这是一种高度灵活和具有记忆效率的预报。 它是Java-optimized,使用诸如名单和阿雷拉等垃圾收集。
DOM4J与OM、SAX、XPath和XSLT合作。 它可以使大型的XML文件破旧不堪。
Environment Setup
In order to use DOM4J parser, you should have dom4j-1.6.1.jar and jaxen.jar in your apppcation s classpath. Download
When to Use?
你们应当使用DOM4J教区——
你们需要了解关于《禁止杀伤人员地雷公约》文件结构的许多情况。
你们需要将XML文件的某些部分移至周围(例如,你可能想确定某些内容)。
你们需要不止一次地利用XML文件中的信息。
你们是 Java的开发者,希望利用 Java-优化的 X平。
What You Get?
当你将XML文件与DOM4J parser合在一起时,你可以灵活地回到树结构,其中包含你文件的所有内容,同时不影响应用的记忆。
DOM4J提供各种实用功能,在文件结构良好、结构众所周知的情况下,可以用来审查XML文件的内容和结构。
DOM4J利用XPath通过XML文件进行航行。
Advantages
DOM4J提供 Java使XML教法的灵活性和易于维持。 这是一种轻度和快速的APIC。
DOM4J Classes
DOM4J界定了几个 Java课程。 这里是最常见的课堂:
<>Element——代表XML要素。 物体有办法操纵其儿童要素、文字、属性和名称空间。
Attribute——系元素的属性。 沥青有获得和确定属性价值的方法。 它有母性和属性。
Common DOM4J methods
当你与DOM4J合作时,你经常使用几种方法。
SAXReader.read(xmlSource) - Building the DOM4J document from an XML sources.
Document.getRootElement() - • 获取XML文件的内容。
Element.node(index) - 将XML的节点放在一个元件中的具体指数。
Node. ValueOf(@Name) 2. 以某一要素的名称确定属性的价值。
Java DOM4J Parser - Parse XML Document
Steps to Using DOM4J
下面是使用DOM4J Parser文件时所用的步骤。
与进口XML有关的包裹。
创建SAXReader。
从档案或档案中生成文件。
• 要求使用XPath表达方式的节点,为此请发文件。
删除了根本内容。
页: 1
检查属性。
Examine sub-elements.
Import XML-related packages
import java.io.*; import java.util.*; import org.dom4j.*;
Create a DocumentBuilder
SAXBuilder saxBuilder = new SAXBuilder();
Create a Document from a file or stream
File inputFile = new File("input.txt"); SAXBuilder saxBuilder = new SAXBuilder(); Document document = saxBuilder.build(inputFile);
Extract the root element
Element classElement = document.getRootElement();
Examine attributes
//returns specific attribute valueOf("@attributeName");
Examine sub-elements
//returns first child node selectSingleNode("subelementName");
Demo Example
这里我们需要的是投入xml文档——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
DOM4JParserDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; pubpc class DOM4JParserDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXReader reader = new SAXReader(); Document document = reader.read( inputFile ); System.out.println("Root element :" + document.getRootElement().getName()); Element classElement = document.getRootElement(); List<Node> nodes = document.selectNodes("/class/student" ); System.out.println("----------------------------"); for (Node node : nodes) { System.out.println(" Current Element :" + node.getName()); System.out.println("Student roll no : " + node.valueOf("@rollno") ); System.out.println("First Name : " + node.selectSingleNode("firstname").getText()); System.out.println("Last Name : " + node.selectSingleNode("lastname").getText()); System.out.println("First Name : " + node.selectSingleNode("nickname").getText()); System.out.println("Marks : " + node.selectSingleNode("marks").getText()); } } catch (DocumentException e) { e.printStackTrace(); } } }
这将产生以下结果:
Root element :class ---------------------------- Current Element :student Student roll no : First Name : dinkar Last Name : kad First Name : dinkar Marks : 85 Current Element :student Student roll no : First Name : Vaneet Last Name : Gupta First Name : vinni Marks : 95 Current Element :student Student roll no : First Name : jasvir Last Name : singn First Name : jazz Marks : 90
Java DOM4J Parser - Query XML Document
Demo Example
这里我们需要的是投入xml文档——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
DOM4JQueryDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; pubpc class DOM4JQueryDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXReader reader = new SAXReader(); Document document = reader.read( inputFile ); System.out.println("Root element :" + document.getRootElement().getName()); Element classElement = document.getRootElement(); List<Node> nodes = document.selectNodes("/class/student[@rollno = 493 ]" ); System.out.println("----------------------------"); for (Node node : nodes) { System.out.println(" Current Element :" + node.getName()); System.out.println("Student roll no : " + node.valueOf("@rollno") ); System.out.println("First Name : " + node.selectSingleNode("firstname").getText()); System.out.println("Last Name : " + node.selectSingleNode("lastname").getText()); System.out.println("First Name : " + node.selectSingleNode("nickname").getText()); System.out.println("Marks : " + node.selectSingleNode("marks").getText()); } } catch (DocumentException e) { e.printStackTrace(); } } }
这将产生以下结果:
Root element :class ---------------------------- Current Element :student Student roll no : 493 First Name : Vaneet Last Name : Gupta First Name : vinni Marks : 95
Java DOM4J Parser - Create XML Document
Demo Example
在这方面,我们需要建立——
<?xml version = "1.0" encoding = "UTF-8"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> </cars>
CreateXmlFileDemo.java
package com.tutorialspoint.xml; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; pubpc class DOM4JCreateXMLDemo { pubpc static void main(String[] args) { try { Document document = DocumentHelper.createDocument(); Element root = document.addElement( "cars" ); Element supercarElement = root.addElement("supercars") .addAttribute("company", "Ferrai"); supercarElement.addElement("carname") .addAttribute("type", "Ferrari 101") .addText("Ferrari 101"); supercarElement.addElement("carname") .addAttribute("type", "sports") .addText("Ferrari 202"); // Pretty print the document to System.out OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer; writer = new XMLWriter( System.out, format ); writer.write( document ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8"?> <cars> <supercars company = "Ferrari"> <carname type = "formula one">Ferrari 101</carname> <carname type = "sports">Ferrari 202</carname> </supercars> </cars>
Java DOM4J Parser - Modify XML Document
Demo Example
在这方面,我们需要修改的《锡马法》——
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
DOM4jModifyXMLDemo.java
package com.tutorialspoint.xml; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; pubpc class DOM4jModifyXMLDemo { pubpc static void main(String[] args) { try { File inputFile = new File("input.txt"); SAXReader reader = new SAXReader(); Document document = reader.read( inputFile ); Element classElement = document.getRootElement(); List<Node> nodes = document.selectNodes("/class/student[@rollno = 493 ]" ); for (Node node : nodes) { Element element = (Element)node; Iterator<Element> iterator = element.elementIterator("marks"); while(iterator.hasNext()) { Element marksElement = (Element)iterator.next(); marksElement.setText("80"); } } // Pretty print the document to System.out OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer; writer = new XMLWriter( System.out, format ); writer.write( document ); } catch (DocumentException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
这将产生以下结果:
<?xml version = "1.0" encoding = "UTF-8"?> <class> <student rollno = "393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>80</marks> </student> <student rollno = "593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>Advertisements