XMLDocument对xml文件的增删改查操作
java xmldocument类的用法
一、概述Java语言是一种跨评台的面向对象编程语言,被广泛应用于企业级应用程序开发领域。
XML(可扩展标记语言)是一种通用的标记语言,用于描述数据的结构和内容。
在Java中,XMLDocument类被用来表示一个XML文档,可以对XML文档进行创建、解析、修改和验证等操作。
二、XMLDocument类的概述1. XMLDocument类位于org.w3c.dom包中,是DOM(文档对象模型)的一部分。
它表示了整个XML文档的树形结构,包括文档的根节点、元素节点、属性节点、文本节点等。
2. XMLDocument类实现了Document接口,提供了操作XML文档的方法。
三、XMLDocument类的基本用法1. 创建XMLDocument对象可以通过DocumentBuilder类的实例来创建一个空的XMLDocument对象。
首先需要创建一个DocumentBuilder对象,然后使用它来创建一个Document对象。
2. 解析XML文档XMLDocument类提供了方法来解析XML文档,例如通过解析器(如SAX解析器或DOM解析器)解析XML文档,并将其转换为XMLDocument对象。
3. 遍历XML文档XMLDocument类提供了方法来遍历XML文档的节点,例如获取文档的根节点、获取子节点、获取父节点、获取兄弟节点等。
4. 修改XML文档XMLDocument类提供了方法来对XML文档进行修改,例如添加节点、删除节点、修改节点的属性和文本内容等。
5. 验证XML文档XMLDocument类提供了方法来验证XML文档的合法性,例如验证文档的结构、验证文档的数据类型等。
6. 将XMLDocument对象序列化为XML文档XMLDocument类提供了方法来将XMLDocument对象序列化为XML文档的字符串表示,以便于存储或传输。
四、XMLDocument类的示例代码以下是一个简单的示例代码,演示了如何创建一个XMLDocument对象,并对其进行一些基本操作。
xml文档数据更新的几种方法
xml文档数据更新的几种方法
XML文档数据更新的几种方法:
1. 手动编辑XML文件,即直接打开XML文件,在文本编辑器或XML编辑器中增删改查数据。
这种方法适用于不需要大量更新数据的情况。
2. 使用XML DOM API操作XML数据,即通过编程语言,如Java、Python等,调用XML DOM API库函数进行增删改查操作。
这种方法适用于需要对大量XML数据进行更新的情况,且具备一定的编程能力。
3. 使用XSLT技术更新XML数据,即通过定义样式表,将不同格式的XML数据转换成需要的格式,并进行增删改查操作。
这种方法适用于需要对XML数据进行复杂的转换和更新的情况,但需要具备一定的XSLT技术和XML数据结构设计能力。
4. 使用XML数据库管理系统,如eXist、MarkLogic等,通过SQL语句或API调用进行XML数据的增删改查操作,可实现多用户、高性能的XML数据管理。
但是这种方法需要使用专门的XML数据库管理系统,并具备相应的数据库管理知识。
单表操作的增删改查开发流程
1,建立单表维护模块需要维护的实体详见增删改查模块的表单配置开发模式中的建实体2,填写配置文件1).配置system-PortletEntities.xml文件,建立栏目,拷贝一段已有的配置代码<portletEntity><name>pygl.szpkxnxqsj</name><portlet-name>pygl.szpkxnxqsj</portlet-name><title>设置排课学年学期时间</title><description>设置排课学年学期时间</description><keywords>设置排课学年学期时间</keywords></portletEntity>修改其中的name、portlet-name、title、description、keywords五个属性。
填写你需要的开发的模块的信息2).配置portlet.xml文件,实现栏目,拷贝一段已有的配置代码,如:<portlet><portlet-name>pygl.szpkxnxqsj</portlet-name><display-name>设置排课学年学期时间</display-name><portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class><init-param><name>contextConfigLocation</name><value>/WEB-INF/portlet-config/pkcssz/pygl.szpkxnxqsj.xml</value></init-param><supports><mime-type>text/html</mime-type><portlet-mode>view</portlet-mode></supports><portlet-info><title>设置排课学年学期时间</title></portlet-info></portlet>修改其中<portlet-name>、<title>、<display-name>分别和system-PortletEntities.xml中配置的<portlet-name>、<title>、<description>严格一致,不然之后搜索栏目,配置成功后栏目中找不到相应的内容。
Oracle之xml的增删改查操作
Oracle之xml的增删改查操作⼯作之余,总结⼀下xml操作的⼀些⽅法和⼼得!tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本⾝为xmltype类型则不需要引⽤xmltype()函数同名标签⽤数组取值的⽅式获取,但起始值从1开始⼀.查询(Query)1. extract函数,查询节点值,带节点名1-- 获取带节点的值,例如:<tel>222</tel>2select extract(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel').getStringVal() as title from project e where e.zh_title='⽩夜追逐繁星';3-- 备注如果节点表达式查询⼀个节点的⽗节点,则会将该⽗节点下的所有节点包含该⽗节点查出 Query Result:tip: extract函数中路径引⽤text(),查询的节点若重复则⾃动拼接select extractvalue(xmltype('<a><b>1</b><b>2</b></a>'),'/a/b') from dual; -- 报错,报只返回⼀个节点值,因为在a标签下存在两个同名标签bselect extract(xmltype('<a><b>1</b><b>2</b></a>'),'/a/b/text()') from dual; -- extract+text() 解决同名节点问题,若存在重复节点会⾃动拼接在⼀起,但不使⽤任何拼接符号2. extractvalue函数,查询节点值,不带节点名-- 获取不带节点的值,例如:2221 select extractvalue(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel') as result from project e where e.zh_title='⽩夜追逐繁星';Query Result:Tip: 节点不存在时,查询结果均为空3. existsnode函数,判断节点是否存在,表⽰存在,0表⽰不存在1 select existsnode(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel') as result from project e where e.zh_title='⽩夜追逐繁星';Query Result:4. sys_dburigen,将指定列通过函数⽣成⼀个该列的URI值,例如:/PUBLIC/PROJECT/ROW[ZH_TITLE='邹成咁180117']/ZH_TITLE1 select sys_dburigen(e.zh_title) as result from project e where e.zh_title='⽩夜追逐繁星';Query Result:5. sys_xmlAgg,合并查询,将多个xml合并,类似于set集合-- sys_xmlGen 将xml转成xmltype实例,⽅便xml合并,sys_xmlAgg⽤于xml合并1 select sys_xmlAgg(sys_xmlgen(e.prj_xml)) as result from project e where e.zh_title='⽩夜追逐繁星'or e.zh_title='⽩夜追逐繁星2' ;Query Result:6. xmlforest,将指定列以xml格式查询出来,可指定⽣成的xml节点名称1 select xmlforest(e.zh_title as zhTitle,e.prj_no as prjNo,e.psn_code as psnCode).getStringVal() as xml from project e where e.zh_title='⽩夜追逐繁星';Query Result:7. xmlelement,为查询出来的xml添加挂载的⽗节点,并将xml字符串格式化成xml ,与xmlforest函数配套使⽤1 select xmlelement(data,xmlforest(e.zh_title,e.prj_no,e.psn_code)).getStringVal() as xml from project e where e.zh_title='⽩夜追逐繁星';Query Result:延伸:为data节点添加属性,使⽤xmlattributes函数1 select xmlelement(data,xmlattributes(e.prj_code as code),xmlforest(e.zh_title,e.prj_no,e.psn_code)).getStringVal() as xml from project e where e.zh_title='⽩夜追逐繁星';Query Result:延伸: XMLCOLATTVAL效果等同于xmlforest函数,但默认会为每个标签添加⼀个属性name,属性值为列明,若未指定列别名,默认该列列明1 select XMLCOLATTVAL(e.zh_title as zhTitle,e.prj_no as prjNo,e.psn_code as psnCode).getStringVal() as xml from project e where e.zh_title='⽩夜追逐繁星'Query Result:8. xmlConcat,xmlType实例之间联结1select xmlelement(data,xmlConcat(xmltype('<a>1</a>'),xmltype('<b>1</b>'))).getStringVal() as result from dual;Query Result:9. xmlsequence将⼀个xml以标签为单位,转换成数组,也就是⼀⾏⾏记录1select e.getStringVal() as result2from table(xmlsequence(extract(xmltype('<a><b>233</b><c>666</c><d>88</d></a>'),'/a/*'))) e;Query Result:⼆.添加(Insert)-- 添加xml节点,insertchildxml添加xml节点,参数3默认指定插在该节点后,若该节点不存在,则追加到⼦节点集合的末尾-- 添加xml节点,insertchildxmlbefore,和insertchildxmlafter添加xml节点,参数3指定插在该节点前或者后,若该节点不存在,则追加到⼦节点集合的末尾1update project e set e.prj_xml=insertchildxml(xmltype(e.prj_xml),'/data/project/persons/person[1]','tel',xmltype('<tel>222</tel>')).getClobVal() where e.zh_title='⽩夜追逐繁星';2update project e set e.prj_xml=insertchildxmlbefore(xmltype(e.prj_xml),'/data/project/persons/person[1]','psn_code',xmltype('<tel>111</tel>')).getClobVal() where e.zh_title='⽩夜追逐繁星';三.修改(Update)-- updatexml⽤于更新节点值1-- updatexml⽤于更新节点值,参数1:需要修改节点的xml字段;参数2:节点路径;参数3:值2update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel','<tel>111</tel>').getClobVal() where e.zh_title='⽩夜追逐繁星';3update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel/text()','222').getClobVal() where e.zh_title='⽩夜追逐繁星';tip: getClobVal()是将xmltype类型转成clob类型⽅法四.删除(Delete)1-- 删除xml节点,参数1:需要删除节点的xml字段;参数2:节点路径;2update project e set e.prj_xml=deletexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel').getClobVal() where e.zh_title='⽩夜追逐繁星';。
sql xml中的modify用法
sql xml中的modify用法SQL中的XML是指在数据库中存储和操作XML文档,XML在数据库中广泛应用于数据交换和Web服务。
XML文档根据其结构和元素,可以通过SQL语句内置的XML函数进行查询、更新、删除等操作。
XML中的modify是XML修改操作的一种方法,本文将详细介绍SQL中的modify用法。
I. Modify函数的作用在SQL中,Modify函数是用来修改XML文档的一种函数,通过该函数可以实现添加、删除、替换、移动、复制等功能。
Modify函数一般用于更新XML文档中的节点,然后将修改后的节点重新保存回数据库中。
SQL中Modify函数的语法如下:modify (XML DML)其中,XML DML是XML数据修改语言(XML Data Modification Language)的缩写,它是SQL Server和Oracle数据库中一种特殊的语言,用于操作XML文档中的节点及其属性。
1. 添加节点Modify函数可以使用insert子句在XML文档中添加节点,其语法如下:modify(insert XPath '内容' [before/after location])其中,XPath表示要添加节点的位置,‘内容’表示要添加的节点内容,[before/after location]表示在某个节点之前或之后添加。
示例如下:2. 删除节点modify(delete XPath)其中,XPath表示要删除的节点位置。
--删除id为1的数据中,xpath为/data/row[2]UPDATE table1 xmldata.modify('delete (/data/row[2])')3. 替换节点其中,XPath是要替换的节点位置,'新节点内容'是替换后节点的内容。
4. 移动节点5. 复制节点1. Modify函数只能用于XML文档的修改操作,不能用于读取操作,但是SQL内置的其他XML函数可以读取XML文档中的内容。
读写XML的四种方法
读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。
它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。
在读写和处理XML数据时,有许多方法可供选择。
本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。
1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。
在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。
读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。
写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。
使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。
- 通过Document对象的方法遍历和操作XML文档的节点。
使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象创建一个Document对象。
- 通过Document对象的方法创建和添加元素节点、属性节点等。
- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。
DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。
对Xml文档进行操作(修改,删除)
对Xml⽂档进⾏操作(修改,删除)<?xml version="1.0" encoding="utf-8"?><Products><Product id="0" proName="aa1" proPrice="12" proInfo="bb"></Product><Product id="1" proName="电脑" proPrice="3200" proInfo="电脑电脑电脑电脑电脑电脑"></Product><Product id="2" proName="mp4" proPrice="400" proInfo="mp4mp4mp4mp4mp4mp4mp4mp4mp4"></Product><Product id="3" proName="mp4" proPrice="400" proInfo="mp4mp4mp4mp4mp4mp4mp4mp4mp4"></Product><Product id="4" proName="mp5" proPrice="500" proInfo="mp5mp5mp5mp5mp5mp5mp5mp5mp5"></Product></Products>下⾯我们来看看如何对上⾯的xml⽂档进⾏删除和修改的操作:其实很简单,⼤概也是分⼀下⼏个步骤:1、将xml⽂档加载到内存中2、找到要删除的节点(根据条件)3、重新保存加载xml⽂档根绝代码具体来看看如何操作修改:protected void Button2_Click(object sender, EventArgs e){XmlDocument xmldocument = new XmlDocument();string path = Server.MapPath("~/Product.xml");xmldocument.Load(path);string xmlPath = "//Products//Product";//根据路径找到所有节点XmlNodeList nodeList = xmldocument.SelectNodes(xmlPath);//循环遍历这些⼦foreach (XmlNode node in nodeList){//根据节点的某个属性找到要操作的节点if(node.Attributes["id"].Value=="4"){//对节点进⾏修改操作node.Attributes["proName"].Value = "aa1";node.Attributes["proPrice"].Value = "12";node.Attributes["proInfo"].Value = "bb";}}//重新加载保存xmldocument.Save(path);}上⾯是对xml进⾏的修改的操作,删除基本和它差不多删除protected void Button1_Click(object sender, EventArgs e){XmlDocument doc = new XmlDocument();string path = Server.MapPath("~/Product.xml");doc.Load(path);XmlNodeList xmlNodeList = doc.SelectNodes("//Products//Product");foreach (XmlNode xmlNode in xmlNodeList){if(xmlNode.Attributes["id"].Value=="4"){//找到⽗节点,从⽗节点删除该节点xmlNode.ParentNode.RemoveChild(xmlNode);}}doc.Save(path);}当然了,也可以删除通过RomoveAllAttributes,RemoveAttribute或RemoveAttributeAt等来删除属性前端时间,在⼀本项⽬教材书上,看到他们对Xml⽂档处理的时候,在查找节点的时候⽤的是索引XmlNode xmlNode = doc.SelectSingleNode("//Products//Product[5]");本⼈认为这种⽅法不可取,我们⼀般都会让你⼀个id对应⼀个节点,如果采取这种⽅式,那么很可能⽆法找到需要的节点,造成程序⽅⾯的错误,这是本⼈的⼀些见解,⼤家有什么意见可以提出来,共同学习!。
C#操作xml:增,删,改,查
c#操作xml/e/404232246.htm同样是增,删,改,查四种操作。
现在我们就详细介绍一下增和删两种操作。
看下面的一个xml示例:<?xml version="1.0" encoding="utf-8"?><phonebook><member id="6"><name>456</name><qq>5465</qq></member><member id="5"><name>jjjjj</name><qq>3456789</qq></member></phonebook>xml的每个节点分为节点名称,节点值和属性三类,如:member节点:id为其一个属性,menber为其节点名称。
再如:name节点456为其节点值。
如果我们需要增加一个节点可以调用一下几个方法:/// <summary>/// 在根节点下添加父节点/// </summary>public static void AddParentNode(string xmlPath,string parentNode){XmlDocument xdoc = new XmlDocument();xdoc.Load(xmlPath);// 创建一个新的menber节点并将它添加到根节点下XmlElement Node = xdoc.CreateElement(parentNode);xdoc.DocumentElement.PrependChild(Node);xdoc.Save(xmlPath);}#region 插入一节点,带一属性/// <summary>/// 插入一节点,带一属性/// </summary>/// <param name="xmlPath">Xml文档路径</param>/// <param name="MainNode">当前节点路径</param>/// <param name="Element">新节点</param>/// <param name="Attrib">属性名称</param>/// <param name="AttribContent">属性值</param>/// <param name="Content">新节点值</param>public static void XmlInsertElement(string xmlPath, string MainNode, string Element,string Attrib, string AttribContent, string Content){XmlDocument objXmlDoc = new XmlDocument();objXmlDoc.Load(xmlPath);XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);XmlElement objElement = objXmlDoc.CreateElement(Element);objElement.SetAttribute(Attrib, AttribContent);objElement.InnerText = Content;objNode.AppendChild(objElement);objXmlDoc.Save(xmlPath);}#endregion#region 插入一节点不带属性public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content){XmlDocument objXmlDoc = new XmlDocument();objXmlDoc.Load(xmlPath);XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);XmlElement objElement = objXmlDoc.CreateElement(Element);objElement.InnerText = Content;objNode.AppendChild(objElement);objXmlDoc.Save(xmlPath);}#endregion#region 向一个节点添加属性/// <summary>/// 向一个节点添加属性/// </summary>/// <param name="xmlPath">xml文件路径</param>/// <param name="NodePath">节点路径</param>/// <param name="NodeAttribute1">要添加的节点属性的名称</param>/// <param name="NodeAttributeText">要添加属性的值</param>public static void AddAttribute(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText){XmlDocument objXmlDoc = new XmlDocument();objXmlDoc.Load(xmlPath);XmlAttribute nodeAttribute = objXmlDoc.CreateAttribute(NodeAttribute1);XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);nodePath.Attributes.Append(nodeAttribute);XmlElement xe = (XmlElement)nodePath;xe.SetAttribute(NodeAttribute1, NodeAttributeText);objXmlDoc.Save(xmlPath);}#endregion如想要加入一个member的父节点,属性id值为7你可以这样来做://取得xml文件的路径string xmlPath = Server.MapPath("~/test.xml");string parentNode="member";//在根节点下添加父节点memberXmlHelper.AddParentNode(xmlPath, parentNode);//刚添加的member节点添加一XmlHelper.AddAttribute(xmlPath, "phonebook/member", "id", "7");则xml文件就会变成这样<?xml version="1.0" encoding="utf-8"?><phonebook><member id="6"><name>456</name><qq>5465</qq></member><member id="5"><name>jjjjj</name><qq>3456789</qq></member><member id="7"></member></phonebook>向新添加的节点member(id=7)的节点下加入节点名称为qq,值为123456的新节点,你可以这样做XmlHelper.XmlInsertElement(xmlPath, "//member[@id="7"]", "qq", "123456");则输出的xml为:<?xml version="1.0" encoding="utf-8"?><phonebook><member id="6"><name>456</name><qq>5465</qq></member><member id="5"><name>jjjjj</name><qq>3456789</qq></member><member id="7"><qq>123456</qq></member></phonebook>增加节点我们就介绍到这里,只要你基本掌握了xpath语法,融会贯通,就可以利用上面几个公用方法对xml文件进行增加操作下面我们介绍一下删除操作,删除共有两种,一是删除某一节点,一种是删除某一节点的属性。
详解PHP使用DOMDocument类遍历_增加_修改_删除XML节点操作
详解PHP使用DOMDocument类遍历_增加_修改_删除XML节点操作DOMDocument类是PHP中用来处理XML文档的类,通过该类可以实现对XML文档的遍历、增加、修改和删除节点的操作。
一、遍历XML节点使用DOMDocument类可以很方便地遍历XML节点,以下是一个遍历XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;//遍历根节点的所有子节点foreach ($root->childNodes as $node)//判断节点类型为元素节点if ($node->nodeType == XML_ELEMENT_NODE)//输出节点的名称和值echo $node->nodeName . ': ' . $node->nodeValue . PHP_EOL;}```二、增加XML节点使用DOMDocument类可以很方便地增加XML节点,以下是一个增加XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//创建节点$newNode = $dom->createElement('book');$attr = $dom->createAttribute('id');$attr->value = '3';$newNode->appendChild($attr);$title = $dom->createElement('title', 'Title 3');$newNode->appendChild($title);$author = $dom->createElement('author', 'Author 3');$newNode->appendChild($author);$root = $dom->documentElement;//添加新节点到根节点$root->appendChild($newNode);//保存XML文档$dom->save('example.xml');```三、修改XML节点使用DOMDocument类可以很方便地修改XML节点,以下是一个修改XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;// 获取指定id的节点$node = $dom->getElementById('1');$node->getElementsByTagName('title')->item(0)->nodeValue = 'New Title';//保存XML文档$dom->save('example.xml');```四、删除XML节点使用DOMDocument类可以很方便地删除XML节点,以下是一个删除XML节点的示例代码:```php// 创建DOMDocument对象$dom = new DOMDocument(;//加载XML文档$dom->load('example.xml');//获取根节点$root = $dom->documentElement;// 获取指定id的节点$node = $dom->getElementById('1');//删除节点$root->removeChild($node);//保存XML文档$dom->save('example.xml');```以上就是PHP使用DOMDocument类进行XML节点操作的详细说明。
java xml格式返回报文解析
java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。
每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。
1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。
DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。
DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。
使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。
2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。
3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。
DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。
但是对于较大的XML文件,DOM解析会消耗大量的内存空间。
2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。
SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。
使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。
2)使用SAXParserFactory创建一个SAXParser对象。
3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。
SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。
一步步学LINQ to XML(二)——利用LINQ to XML操纵XML文档
XEl eme tro n o t= XEe n. o d( re. p a h( lme tL a Sev rMa P t “ S v rr s l a e ut s=fO x nr o . s e d n s t d n m e i}o t De c n a t ( u e t} s wh r ee (tigx . tiu e ( n = sr )eAtr t ” o) n b s =
…
…
NT R EWO K&C 啊啊U I盯 IN… … … … … … … … …… ……… … … … … … … … …… … … … … … … …… … 0 NC O …
。 叠 薯薹誊
一步步警■
_ 利
● ● (
÷
。
j j
Qtx o M :  ̄
摘 要 : 传 统 模 式 ( DOM ) 下 操 纵 XM L 文 档 需 要 编 写 大 量 代 码 。 利 用 L NQ o XM L 可 以 大 大 I t 简 化 对 XML 文 档 的 操 作 , 充 分 利 用 LNQ 查 询 , 快 速 地 完 成 操 纵 X L 文 档 进 行 查 询 、 添 加 、 I M
删 除 、及修 改操 作 。
关 键 词 :LNQ L I t XM ;操 纵 XML 文 档 ; 实例 O
上 一 讲 讲 述 了 LN L的 基 础 知 识 , 以下 结 合 具 体 实 I Q t XM o 例 详 尽 讲 解 如 何 通 过 LN ML操 纵 XML文 档 。 IQtX o
构 的 .即 对 于 元 素 及 属 性 本 身 进 行 相 关 操 作 。 这 里 的增 删 改是 针对 X ML文 档 内容 的 。 传 统 模 式 ( O D M)下 操 纵 XM L文 档 需
asp添加、删除、修改xml文件中的节点
asp添加、删除、修改xml文件中的节点asp添加、删除、修改xml文件中的节点1.ASP显示xml文件中的所有节点2.ASP向xml文件中的添加节点3.ASP删除xml文件中某个节点4.使用asp修改xml中的节点1.ASP操作xml--显示xml文件中的所有节点通常是利用数据库来保存数据,但也可以使用xml文件来保存数据。
假设xml文件的内容是:test.xml<?xml version="1.0" encoding="gb2312"?><site><root><list><id>0</id><name>新浪</name><url></url><time>2007-11-1 10:10:10</time></list><list><id>1</id><name>google</name><url></url><time>2007-11-2 11:11:11</time></list></root></site>用来显示xml中的内容的asp文件index.asp<style>body {font-size:12px;}</style><%strSourceFile = Server.MapPath("./") & "\test.xml"''获取XML文件的路径这里根据你的虚拟目录不同而不同Set objXML = Server.CreateObject("Microsoft.FreeThreadedXMLDOM") ''以自由线程创建一个XML对像objXML.load(strSourceFile)''把XML文件读入内存Set objRootsite = objXML.documentElement.selectSingleNode("root") ''选取root节点num=objRootsite.childNodes.length-1For i=0 To numresponse.write "网站名:"&objRootsite.childNodes.item(i).childNodes.item(1).text&"<ahref=""javascript:delxml("&objRootsite.childNodes.item(i).child Nodes.item(0).text&")"">删除</a> <a href=""editxml.asp?id="&objRootsite.childNodes.item(i).childN odes.item(0).text&""">修改</a>"response.write "网址:"&objRootsite.childNodes.item(i).childNodes.item(2).text&""response.write "添加时间:"&objRootsite.childNodes.item(i).childNodes.item(3).text&""next%><script>function delxml(id){if(!confirm("确定要删除吗?")) return false;location.href=''delxml.asp?id=''+id;}</script>注意:index.asp要与test.xml文件放在同一目录下。
对oracle里面clob字段里面xml的增删改查学习
对oracle⾥⾯clob字段⾥⾯xml的增删改查学习 这段时间,我使⽤系统表⾥⾯有clob字段⾥⾯存放的xml信息,我们如何对xml进⾏增删改查操作呢,⾃⼰参考了很多也学到很多,给⼤家分享⼀下 ⾸先我们先建测试表CREATE TABLE EFGP_231.FORMINSTANCE_2019_07_20_test1( OID CHAR(32) NOT NULL ENABLE,FIELDVALUES CLOB NOT NULL ENABLE) 创建完以后,clob字段放⼊我们xml数据,具体是什么呢,<quanxian><Textbox6 id="Textbox6" dataType="ng.String" perDataProId=""></Textbox6><Textbox9 id="Textbox9" dataType="ng.String" perDataProId="">1205</Textbox9><Textbox10 id="Textbox10" dataType="ng.String" perDataProId="">2019/07/18</Textbox10><TextArea14 id="TextArea14" dataType="ng.String" perDataProId=""></TextArea14><SerialNumber id="SerialNumber" dataType="ng.String">zx-2019074674</SerialNumber><Textbox21 id="Textbox21" dataType="ng.String" perDataProId=""></Textbox21><HiddenTextField0 id="HiddenTextField0" dataType="ng.String" perDataProId=""/><Checkbox0 id="Checkbox0" dataType="ng.String">0</Checkbox0><Checkbox1 id="Checkbox1" dataType="ng.String"/><Checkbox2 id="Checkbox2" dataType="ng.String"/><Checkbox3 id="Checkbox3" dataType="ng.String"/><Checkbox4 id="Checkbox4" dataType="ng.String"/><Checkbox5 id="Checkbox5" dataType="ng.String"/><Textbox11 id="Textbox11" dataType="ng.String" perDataProId=""></Textbox11><HiddenTextField1 id="HiddenTextField1" dataType="ng.String" perDataProId=""/><HiddenTextField2 id="HiddenTextField2" dataType="ng.String" perDataProId="">1205</HiddenTextField2><RadioButton18 id="RadioButton18" dataType="ng.String"/><TextArea19 id="TextArea19" dataType="ng.String" perDataProId=""/><Textbox0 id="Textbox0" dataType="ng.String" perDataProId="">19060071</Textbox0><Textbox1 id="Textbox1" dataType="ng.String" perDataProId=""></Textbox1><Checkbox7 id="Checkbox7" dataType="ng.String"/><Checkbox9 id="Checkbox9" dataType="ng.String"/><Checkbox8 id="Checkbox8" dataType="ng.String"/><TextArea0 id="TextArea0" dataType="ng.String" perDataProId=""/><Checkbox6 id="Checkbox6" dataType="ng.String"/><HiddenTextField3 id="HiddenTextField3" dataType="ng.String" perDataProId=""/><HiddenTextField4 id="HiddenTextField4" dataType="ng.String" perDataProId="">R</HiddenTextField4><Checkbox10 id="Checkbox10" dataType="ng.String"/><Checkbox11 id="Checkbox11" dataType="ng.String"/><Dropdown13 id="Dropdown13" dataType="ng.String">SX003</Dropdown13><TextArea15 id="TextArea15" dataType="ng.String" perDataProId=""></TextArea15><TextArea25 id="TextArea25" dataType="ng.String" perDataProId=""></TextArea25><Checkbox24 id="Checkbox24" dataType="ng.String"/><TextArea26 id="TextArea26" dataType="ng.String" perDataProId=""/><hd5 id="hd5" dataType="ng.String" perDataProId=""/><hd6 id="hd6" dataType="ng.String" perDataProId=""/><ps0 id="ps0" dataType="ng.String" perDataProId=""></ps0><ps1 id="ps1" dataType="ng.String" perDataProId="">SX003</ps1><hd0 id="hd0" dataType="ng.String" perDataProId="">false</hd0><SubjectInfo id="SubjectInfo" dataType="ng.String" perDataProId=""></SubjectInfo><GroupArrayInfo id="GroupArrayInfo" dataType="ng.String" perDataProId=""></GroupArrayInfo><Checkbox12 id="Checkbox12" dataType="ng.String"/><Checkbox13 id="Checkbox13" dataType="ng.String"/></quanxian>接下来是oracle增删改查-- 获取不带节点的值,例如:222select extractvalue(xmltype(t.fieldvalues),'/quanxian/TextArea15') as result from Forminstance_2019_07_20_test1 t where t.oid ='17297af0e588100488896efdb640ce5e';--修改UPDATE Forminstance t SET t.fieldvalues =updatexml(xmltype(t.fieldvalues),'/quanxian/Textbox6','<Textbox6>魏伟111</Textbox6>').getClobVal()WHERE t.oid = '17297af0e588100488896efdb640ce5e'--删除update Forminstance_2019_07_20 t set t.fieldvalues=deletexml(xmltype(t.fieldvalues),'/quanxian/TextArea15').getClobVal() WHERE t.oid = '17297af0e588100488896efdb640ce5e';-- 添加xml节点,insertchildxml添加xml节点,参数3默认指定插在该节点后,若该节点不存在,则追加到⼦节点集合的末尾-- 添加xml节点,insertchildxmlbefore,和insertchildxmlafter添加xml节点,---参数3指定插在该节点前或者后,若该节点不存在,则追加到⼦节点集合的末尾update Forminstance_2019_07_20_test1 t sett.fieldvalues=insertchildxml(xmltype(t.fieldvalues),'/quanxian','tel',xmltype('<tel>222</tel>')).getClobVal() wheret.oid='17297af0e588100488896efdb640ce5e';update Forminstance_2019_07_20_test1 t sett.fieldvalues=insertchildxmlbefore(xmltype(t.fieldvalues),'/quanxian','Textbox6',xmltype('<TextArea15>111</TextArea15>')).getClobVal() WHERE t.oid = '17297af0e588100488896efdb640ce5e';。
XML DOM添加和删除属性节点
XML DOM添加和删除属性节点
XML文档中标记的属性具有属性名称和属性值,如果通过DOM形成XML文档的树模型,会形成属性节点和相应的文本节点。
此时,可以对DOM树模型中属性节点进行添加和删除操作。
创建案例,演示添加和删除属性节点。
首先创建XM
将上述代码保存,名称为Example9.xml。
创建解析XML文档的Java程序,打
将上述代码保存,名称为Example9.java。
打开命令提示符窗口,编译和解释执行该文件,会形成一个新的XML文档Example9.xml。
直接双击该XML文档,会显示如图6-12所示窗口:
图6-12 添加或删除属性节点
在该案例中,如果要添加或删除指定节点属性,需要利用“getElementsByTag Name("")”先获取该节点集合,并调用getLength()方法获取节点集合长度。
然后在for循环中,从节点集合中获取具体的节点,并进行判断。
如果该节点是元素节点,则调用“removeAttribute("品牌")”或“setAttribute("币种","人民币")”删除或添加新
的属性节点。
SQLServer中的XML数据进行insert、update、delete
SQLServer中的XML数据进⾏insert、update、deleteSQL Server 2005/2008增加了对XML数据的⽀持,同时也新增了⼏种操作XML的⽅法,本⽂主要以SQL Server 2008为例介绍如何对XML数据进⾏insert、update、delete。
SQL Server中新增加了XML.Modify()⽅法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插⼊,删除和修改操作。
本⽂以下⾯XML为例,对三种DML进⾏说明:declare @XMLVar XML;SET @XMLVar= '<catalog><book category="ITPro"><title>Windows Step By Step</title><author>Bill Zack</author><price>49.99</price></book><book category="Developer"><title>Developing ADO .NET</title><author>Andrew Brust</author><price>39.93</price></book><book category="ITPro"><title>Windows Cluster Server</title><author>Stephen Forte</author><price>59.99</price></book></catalog>'1.XML.Modify(Insert)语句介绍A.利⽤as first,at last,before,after四个参数将元素插⼊指定的位置set @XMLVar.modify('insert <first name="at first" /> as first into (/catalog[1]/book[1])')set @XMLVar.modify('insert <last name="at last"/> as last into (/catalog[1]/book[1])')set @XMLVar.modify('insert <before name="before"/> before (/catalog[1]/book[1]/author[1])')set @XMLVar.modify('insert <after name="after"/> after (/catalog[1]/book[1]/author[1])')SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: <first name="at first" />3: <title>Windows Step By Step</title>4: <before name="before" />5: <author>Bill Zack</author>6: <after name="after" />7: <price>49.99</price>8: <last name="at last" />9: </book>B.将多个元素插⼊⽂档中--⽅法⼀:利⽤变量进⾏插⼊DECLARE @newFeatures xml;SET @newFeatures = N'; <first>one element</first> <second>second element</second>'SET @XMLVar.modify(' )insert sql:variable("@newFeatures")into (/catalog[1]/book[1])'--⽅法⼆:直接插⼊set @XMLVar.modify(')insert (<first>one element</first>,<second>second element</second>)into (/catalog[1]/book[1]/author[1])'SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: <title>Windows Step By Step</title>3: <author>Bill Zack4: <first>one element</first>5: <second>second element</second>6: </author>7: <price>49.99</price>8: <first>one element</first>9: <second>second element</second>10: </book>C.将属性插⼊⽂档中--使⽤变量插⼊declare @var nvarchar(10) = '变量插⼊'set @XMLVar.modify('insert (attribute var {sql:variable("@var")}))into (/catalog[1]/book[1])'--直接插⼊set @XMLVar.modify('insert (attribute name {"直接插⼊"}))into (/catalog[1]/book[1]/title[1])'--多值插⼊set @XMLVar.modify('insert (attribute Id {"多值插⼊1"},attribute name {"多值插⼊2"}) )into (/catalog[1]/book[1]/author[1])'SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro" var="变量插⼊">2: <title name="直接插⼊">Windows Step By Step</title>3: <author Id="多值插⼊1" name="多值插⼊2">Bill Zack</author>4: <price>49.99</price>5: </book>D.插⼊⽂本节点set @XMLVar.modify('insert text{"at first"} as first)into (/catalog[1]/book[1])'SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: at first3: <title>Windows Step By Step</title>4: <author>Bill Zack</author>5: <price>49.99</price>6: </book>注意:插⼊本⽂同样具体 as first,as last,before,after四种选项,可以参考A中的使⽤⽅法E.插⼊注释节点set @XMLVar.modify(N'insert <!--插⼊评论-->before (/catalog[1]/book[1]/title[1])' )SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: <!--插⼊评论-->3: <title>Windows Step By Step</title>4: <author>Bill Zack</author>5: <price>49.99</price>6: </book>注意插⼊注释节点同样具体 as first,as last,before,after四种选项,可以参考A中的使⽤⽅法F.插⼊处理指令set @XMLVar.modify('insert <?Program "Instructions.exe" ?>before (/catalog[1]/book[1]/title[1])' )SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: <?Program "Instructions.exe" ?>3: <title>Windows Step By Step</title>4: <author>Bill Zack</author>5: <price>49.99</price>6: </book>注意插⼊处理指令同样具体 as first,as last,before,after四种选项,可以参考A中的使⽤⽅法G.根据 if 条件语句进⾏插⼊set @XMLVar.modify('insertif (/catalog[1]/book[1]/title[2]) thentext{"this is a 1 step"}else ( text{"this is a 2 step"} )into (/catalog[1]/book[1]/price[1])' )SELECT @XMLVar.query('/catalog[1]/book[1]');结果集为:1: <book category="ITPro">2: <title>Windows Step By Step</title>3: <author>Bill Zack</author>4: <price>49.99this is a 2 step</price>5: </book>2.XML.Modify(delete)语句介绍--删除属性set @XMLVar.modify('delete /catalog[1]/book[1]/@category')--删除节点set @XMLVar.modify('delete /catalog[1]/book[1]/title[1]')--删除内容set @XMLVar.modify('delete /catalog[1]/book[1]/author[1]/text()')--全部删除set @XMLVar.modify('delete /catalog[1]/book[2]')SELECT @XMLVar.query('/catalog[1]');结果集为:1: <catalog>2: <book>3: <author />4: <price>49.99</price>5: </book>6: <book category="ITPro">7: <title>Windows Cluster Server</title>8: <author>Stephen Forte</author>9: <price>59.99</price>10: </book>11: </catalog>3.XML.Modify(replace)语句介绍--替换属性set @XMLVar.modify(N'replace value of(/catalog[1]/book[1]/@category)with ("替换属性")' )--替换内容set @XMLVar.modify(N'replace value of(/catalog[1]/book[1]/author[1]/text()[1]) with("替换内容")' )--条件替换set @XMLVar.modify(N'replace value of (/catalog[1]/book[2]/@category) with(if(count(/catalog[1]/book)>4) then"条件替换1"else"条件替换2")' )SELECT @XMLVar.query('/catalog[1]'); 结果集为:1: <catalog>2: <book category="替换属性">3: <title>Windows Step By Step</title>4: <author>替换内容</author>5: <price>49.99</price>6: </book>7: <book category="条件替换2">8: <title>Developing ADO .NET</title>9: <author>Andrew Brust</author>10: <price>39.93</price>11: </book>12: <book category="ITPro">13: <title>Windows Cluster Server</title>14: <author>Stephen Forte</author>15: <price>59.99</price>16: </book>17: </catalog>。
怎样在C#里对xml文件进行修改,新增,删除,插入操作
怎样在C#里对xml文件进行修改,新增,删除,插入操作?已知有一个XML文件(bookstore.xml)如下:<?xml vers ion="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book></bookstore>1、往<bookstore>节点中插入一个<book>节点:XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load("bookstore.xml");XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore> XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点xe1.SetAttribute("genre","李赞红");//设置该节点genre属性xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性XmlElement xesub1=xmlDoc.CreateElement("title");xesub1.InnerText="CS从入门到精通";//设置文本节点xe1.AppendChild(xesub1);//添加到<book>节点中XmlElement xesub2=xmlDoc.CreateElement("author");xesub2.InnerText="候捷";xe1.AppendChild(xesub2);XmlElement xesub3=xmlDoc.CreateElement("price");xesub3.InnerText="58.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<bookstore>节点中xmlDoc.Save("bookstore.xml");//================结果为:<?xml vers ion="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book genre="李赞红" ISBN="2-3631-4"><title>CS从入门到精通</title><author>候捷</author><price>58.3</price></book></bookstore>2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
xml文件的增删改查
package com.accp.xml.dom4j;import java.io.FileInputStream;import java.io.FileNotFoundException; import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStreamWriter; import java.io.Writer;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException; import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.dom4j.tree.DefaultDocument; import org.xml.sax.EntityResolver;import org.xml.sax.InputSource;import org.xml.sax.SAXException;/*** xml的增删改查示例** @author**/public class XMLCrud {/*** 默认的构造方法** @throws DocumentException* @throws IOException* @throws SAXException*/public XMLCrud() {// Document doc = loadXML("class.xml"); //// // 载入XML文档// // System.out.println(doc.asXML());//// // 打印XML文档// printDoc(doc);//// // 把XML文档存入硬盘// storeDoc(doc, "new.xml");// 新建xml文档对象// Document doc1 = this.createDoc();////////////// //存入note.xml// storeDoc(doc1, "note.xml");// System.out.println(getStudentCount(doc));/** // 校验dtd XML文档doc = valideDoc("class.xml");** printDoc(doc); // 校验Schema文档doc =* validateDocBySxd("classSchema.xml"); printDoc(doc);** String url = getClass().getResource("/xml/dom4j/wkjava/class.xsd") * .toString(); // 校验Schema文档(俩参数)doc =* validateDocBySxd("classSchema.xml", url); printDoc(doc); //* 创建Schema文档doc = createDoc(); storeDoc(doc, "root.xml"); doc = * validateDocBySxd("classSchema.xml"); // 在文档中修改原属updateZip(doc, * "102202"); printDoc(doc);** doc = validateDocBySxd("classSchema.xml"); // 打印文档中所有学生名字* printNames(doc);***/}public static void main(String[] args) {XMLCrud xml = new XMLCrud();xml.genXMLFile();}/*** 装载xml文件,解析为dom文档对象** @param xmlfile* @return* @throws FileNotFoundException* @throws DocumentException*/public Document loadXML(String xmlfile) throws FileNotFoundException, DocumentException {// 获得SAX的xml解析器SAXReader reader = new SAXReader();// 解析xml文件获得文档对象引用Document doc = reader.read(new FileInputStream(xmlfile));return doc;}/*** 打印doc文档** @param doc* @throws IOException*/public void printDoc(Document doc) throws IOException {// 创建字符输出流(输出目标为控制台System.out)Writer out = new OutputStreamWriter(System.out, "utf-8");// 创建输出格式对象OutputFormat format = OutputFormat.createPrettyPrint();// 由字符输出流对象和输出格式对象为参数创建xml输出对象XMLWriter writer = new XMLWriter(out, format);// 调用输出方法(如果输出目标为文件,则相当于保存xml文档)writer.write(doc);// 刷新输出流,清空缓存out.flush();}/*** 保存xml文档对象为xml文件** @param doc* @param filename* 指定的文件路径* @throws IOException*/public void storeDoc(Document doc, String filename) throws IOException {// 获取输出流(输出到文件中,文件内码编码为utf-8)Writer out = new OutputStreamWriter(new FileOutputStream(filename), "utf-8");// 获取一个输出格式对象,用来设置生成的xml的格式OutputFormat format = OutputFormat.createPrettyPrint();// 设置xml文件缩进的字符,(示例为缩进8个空格)format.setIndent(" ");// 通过输出流和输出格式对象来生成xml的输出对象XMLWriter writer = new XMLWriter(out, format);// 保存xml文档到对应文件writer.write(doc);// 关闭输出流out.close();}public Document validateDocBySxd(String xmlfile) throws SAXException, DocumentException, IOException {SAXReader reader = new SAXReader(true);reader.setFeature("/xml/features/validation/schema", true);Document doc = reader.read(new FileInputStream(xmlfile));return doc;}public Document valideDoc(String xmlfile) throws DocumentException,IOException {EntityResolver resolver = new EntityResolver() {public InputSource resolveEntity(String publicId, String systemId)throws SAXException, IOException {if (publicId.equals("//class from weiking")) {InputStream in = new FileInputStream("class.dtd");return new InputSource(in);}return null;}};SAXReader reader = new SAXReader(true);reader.setEntityResolver(resolver);Document doc = reader.read(new FileInputStream(xmlfile));return doc;}public Document validateDocBySxd(String xmlfile, String SchemaUrl)throws SAXException, FileNotFoundException, DocumentException {SAXReader reader = new SAXReader(true);reader.setFeature("/sax/features/validation", true);reader.setFeature("/xml/features/validation/schema",true);reader.setFeature("/xml/features/validation/schema-full-checking",true);reader.setProperty("/xml/properties/schema/external-noNamespaceSchem aLocation",SchemaUrl);Document doc = reader.read(new FileInputStream(xmlfile));return doc;}/*** 创建xml文档对象存在于内存中,需要调用保存方法才能持久化该对象** @return xml文档树对象*/public Document createDoc() {// 创建文档对象有两种方式// 1-创建一个缺省的文档对象DefaultDocument doc = new DefaultDocument();// 2-利用DocumentHelper.createDocument()创建一个文档对象// Document doc = DocumentHelper.createDocument();// 添加一个元素作为根节点Element root = doc.addElement("root");// 在根节点上添加子节点及属性还有文本节点Element author2 = root.addElement("author").addAttribute("name", "Toby").addAttribute("location","Germany").addText("Tobias Rademacher");Element author1 = root.addElement("author").addAttribute("name","James").addAttribute("location", "UK").addText("James Strachan");return doc;}/*** 更新文档中某个节点的值修改的是内存的dom树,所以需要重新调用保存doc ** @param doc* @param zip*/public void updateZip(Document doc, String zip) {// 对应节点的xpath表达式String xpath = "/Class/Teacher/zip";// 根据xpath表达式获取对应节点元素Element e = (Element) doc.selectSingleNode(xpath);// 修改该节点的值e.setText(zip);}/*** 输出dom树** @param doc*/public void printNames(Document doc) {// 定义xpath表达式字符串String xpath = "/Class/Students/Student/name";//List list = doc.selectNodes(xpath);for (Iterator i = list.iterator(); i.hasNext();) {Element e = (Element) i.next();System.out.println(e.element("last").getText() + e.valueOf("first"));}}/*** 获取对应节点的数量* @param doc* @return*/public int getStudentCount(Document doc) {int count = 0;// XPath 使用路径表达式来选取XML 文档中的节点或者节点集。
BookXml增删改查
package com.pb.bdqn.BookDao;import java.util.ArrayList;import java.util.List;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import com.pb.bdqn.XmlUtil.XmlUtil;import cpm.pb.bdqn.bookEntity.Book;public class BookDao{/** 查询所有书的信息*/public List<Book> getAll(){Document doc=XmlUtil.getDoc("xml/Students.xml");ArrayList<Book> bookList = new ArrayList<Book>();if(doc!=null){// 4.读取书的信息NodeList list = doc.getElementsByTagName("book");Book book;for(int i=0;i<list.getLength();i++){Element bookElement = (Element)list.item(i);String id=bookElement.getAttribute("id");Stringname=bookElement.getElementsByTagName("name").item(0).getFirstChild().getN odeValue();Stringauthor=bookElement.getElementsByTagName("author").item(0).getFirstChild(). getNodeValue();Stringpubdate=bookElement.getElementsByTagName("pubdate").item(0).getFirstChild( ).getNodeValue();Stringpress=bookElement.getElementsByTagName("press").item(0).getFirstChild().ge tNodeValue();book = new Book(id,name,author,pubdate,press);bookList.add(book);}return bookList;}else{return null;}}/** 通过编号查询书的信息*/public List<Book> getbookById(String id){Book book = null;Document doc=XmlUtil.getDoc("xml/Students.xml");ArrayList<Book> bookList = new ArrayList<Book>();if(doc!=null){// 4.读取书的信息NodeList list = doc.getElementsByTagName("book");for(int i=0;i<list.getLength();i++){Element bookElement = (Element)list.item(i);String bookId=bookElement.getAttribute("id");if(bookId.equals("id")){book=new Book();Stringname=bookElement.getElementsByTagName("name").item(0).getFirstChild().getN odeValue();Stringauthor=bookElement.getElementsByTagName("author").item(0).getFirstChild(). getNodeValue();Stringpubdate=bookElement.getElementsByTagName("pubdate").item(0).getFirstChild( ).getNodeValue();Stringpress=bookElement.getElementsByTagName("press").item(0).getFirstChild().ge tNodeValue();book.setId(bookId);book.setName(name);book.setAuthor(author);book.setPubdate(pubdate);book.setPress(press);bookList.add(book);break;}}return bookList;}else{return null;}}/** 增加图书信息*/public boolean addBk(Book book){Document doc=XmlUtil.getDoc("xml/Students.xml");Element root = doc.getDocumentElement();//4.创建新的节点//创建一个book新节点Element bk=doc.createElement("book");bk.setAttribute("id", "b005");root.appendChild(bk);//创建name节点Element name=doc.createElement("name");name.setTextContent(book.getName());//创建author节点Element author=doc.createElement("author");author.setTextContent(book.getAuthor());//创建pubdate节点Element pubdate=doc.createElement("pubdate");pubdate.setTextContent(book.getPubdate());//创建press节点Element press=doc.createElement("press");press.setTextContent(book.getPress());bk.appendChild(name);bk.appendChild(author);bk.appendChild(pubdate);bk.appendChild(press);return XmlUtil.save(doc,"src/Book.xml");}/** 修改图书*/public boolean modifyBk(Book bk){Document doc=XmlUtil.getDoc("xml/Students.xml");Element root = doc.getDocumentElement();NodeList list=root.getElementsByTagName("book");for(int i =0;i<list.getLength();i++){Element book=(Element)list.item(i);String id=book.getAttribute("id");if(id.equals(bk.getId())){book.getElementsByTagName("name").item(0).setTextContent(bk.getName());book.getElementsByTagName("author").item(0).setTextContent(bk.getAuthor ());book.getElementsByTagName("pubdate").item(0).setTextContent(bk.getPubda te());book.getElementsByTagName("press").item(0).setTextContent(bk.getPress() );break;}}return XmlUtil.save(doc,"src/Book.xml");}/** 删除图书*/public boolean deleteBk(String id){Document doc=XmlUtil.getDoc("xml/Students.xml");Element root = doc.getDocumentElement();NodeList list=root.getElementsByTagName("book");for(int i=0;i<list.getLength();i++){Element book=(Element) list.item(i);String bkId=book.getAttribute(id);if(id.equals(bkId)){book.getParentNode().removeChild(book);break;}}return XmlUtil.save(doc,"src/Book.xml");}}package com.pb.bdqn.bookBiz;import java.util.InputMismatchException;import java.util.List;import java.util.Scanner;import com.pb.bdqn.BookDao.BookDao;import cpm.pb.bdqn.bookEntity.Book;public class bookBiz {Book book =new Book();BookDao bookdao =new BookDao();Scanner input = new Scanner(System.in);String id=null;String name=null;String author=null;String pubdate=null;String press=null;int option=0;//开始菜单public void startMenu() {System.out.println("欢迎使用图书管理系统!");System.out.println("1.查询所有图书信息 \n2.通过编号进行查询");System.out.println("3.增加节点");System.out.println("4.修改节点");System.out.println("5.删除节点");System.out.println("请输入1/2/3/4/5:");do{try{option=input.nextInt();if(option>=1&&option<=5){break;}else{System.out.println("输入错误,请重新输入:");}}catch(InputMismatchException ime){System.out.println("输入错误,请重新输入:");input.next();}}while(true);switch(option){case 1://打印输出所有图书信息printAll();break;case 2://利用编号查询图书信息printById();break;case 3://添加图书信息add();break;case 4://修改图书信息modify();break;case 5://删除图书信息delete();break;default:break;}}//case1:遍历所有图书信息public void printAll(){List<Book> list = bookdao.getAll();if(list != null){System.out.println("编号\t书名\t作者\t出版日期\t出版社");for(Book book:list){System.out.println(book.getId()+"\t"+book.getName()+"\t"+book.getAuthor ()+"\t"+book.getPubdate()+"\t"+book.getPress());}}else{System.out.println("读取XML异常");}startMenu();}//case2:通过编号查询图书的信息public void printById(){System.out.println("请输入图书编号:");id= input.next();List<Book> booklist = bookdao.getbookById(id);if(booklist != null){System.out.println("书名\t作者\t出版日期\t出版社");System.out.println(book.getName()+"\t"+book.getAuthor()+"\t"+book.getPubda te()+"\t"+book.getPress());}else{System.out.println("没有此图书信息!");}startMenu();}//case3:添加图书信息public void add(){//判断图书编号是否存在do{System.out.println("请输入图书编号:");id=input.next();if(bookdao.getbookById(id) != null){System.out.println("此图书已存在,请重新输入:");}else{break;}}while(true);System.out.println("请输入图书名称:");name=input.next();System.out.println("请输入图书作者:");author=input.next();System.out.println("请输入图书出版日期:");pubdate=input.next();System.out.println("请输入图书出版社:");press=input.next();Book book = new Book(id,name,author,pubdate,press);if(bookdao.addBk(book)){System.out.println("添加成功!");}else{System.out.println("添加失败!");}startMenu();}//修改图书public void modify(){//判断图书是否存在do{System.out.println("请输入图书编号:");id=input.next();if(bookdao.getbookById(id) == null){System.out.println("此图书不存在,请重新输入:");}else{break;}}while(true);book.setId(id);System.out.println("请输入图书名称:");book.setName(input.next());System.out.println("请输入图书作者:");book.setAuthor(input.next());System.out.println("请输入图书出版日期:");book.setPubdate(input.next());System.out.println("请输入图书出版社:");book.setPress(input.next());if(bookdao.modifyBk(book)){System.out.println("修改成功!");}else{System.out.println("修改失败!");}startMenu();}//删除图书public void delete(){System.out.println("请输入图书编号:");id=input.next();if(bookdao.deleteBk(id)){System.out.println("删除成功!");}else{System.out.println("删除失败!");}startMenu();}}package com.pb.bdqn.XmlUtil;/** 业务逻辑类import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.xml.sax.SAXException;public class XmlUtil {/** 获得DOM树的方法*/public static Document getDoc(String url){Document doc=null;try{// 1.得到DOM解析器工厂的实例DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// 2.从DOM工厂获得DOM解析器DocumentBuilder db = dbf.newDocumentBuilder();// 3.解析XML文档,得到一个Document,即DOM树doc = db.parse("src/Book.xml");} catch (ParserConfigurationException e) {System.out.println("解析XML文件异常!");} catch (SAXException e) {System.out.println("解析XML文件异常!");} catch (IOException e) {System.out.println("读取XML文件异常!");}return doc;}/*** 保存XML*/public static boolean save(Document dom,String fileName){ try {//保存XML文件TransformerFactorytransformerFactory=TransformerFactory.newInstance();Transformer transformer=transformerFactory.newTransformer();DOMSource domSource = new DOMSource(dom);//设置编码格式transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");StreamResult result = new StreamResult(newFileOutputStream(fileName));//把DOM树转换为XML文件transformer.transform(domSource, result);return true;} catch (TransformerConfigurationException e) {System.out.println("格式转换异常");return false;} catch (IllegalArgumentException e) {System.out.println("格式转换异常");return false;} catch (FileNotFoundException e) {System.out.println("格式转换异常");return false;} catch (TransformerFactoryConfigurationError e) {System.out.println("格式转换异常");return false;} catch (TransformerException e) {System.out.println("格式转换异常");return false;}}}package cpm.pb.bdqn.bookEntity;/** 书的实体类*/public class Book {private String id;private String name;private String author;private String pubdate;private String press;// 无参构造方法public Book() {}// 有参构造方法public Book(String id, String name, String author, String pubdate, String press) {this.id = id; = name;this.author = author;this.pubdate = pubdate;this.press = press;}// setters和getters方法public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getPubdate() {return pubdate;}public void setPubdate(String pubdate) {this.pubdate = pubdate;}public String getPress() {return press;}public void setPress(String press) {this.press = press;}}<?xml version="1.0"encoding="UTF-8"standalone="no"?><books> <book id="b001"><name>谁知道</name><author>zhaoming</author><pubdate>2011.2.1</pubdate><press>中信</press></book><book id="b002"><name>绽放</name><author>周义</author><pubdate>2010-5-1</pubdate><press>中信出版社</press></book><book id="b003"><name>洗脑术</name><author>高德</author><pubdate>2014-5-1</pubdate><press>北京时代华文书局</press> </book><book id="b004"><name>巴菲特之道</name><author>罗伯特</author><pubdate>2015-2-10</pubdate><press>机械工业出版社</press> </book></books>。
xml中批量新增数据或者批量修改数据
xml中批量新增数据或者批量修改数据批量提交多条语句需要在 mysql 的连接⾥⾯开启 allowMultiQueries=true如:url: jdbc:mysql://127.0.0.1:3306/ku?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true<insert id="batchInsert" parameterType="com.Entity">insert into pos_parameter ( store_id, pos_id,parameter_id, parameter_name, parameter_value,parameter_desc, parameter_type, is_show,is_modify, create_user_id, memo,created_time, updated_time)values<foreach collection="list" item="param" index="index" separator=",">( #{param.storeId,jdbcType=VARCHAR}, #{param.posId,jdbcType=VARCHAR},#{param.parameterId,jdbcType=VARCHAR}, #{param.parameterName,jdbcType=VARCHAR}, #{param.parameterValue,jdbcType=VARCHAR}, #{param.parameterDesc,jdbcType=VARCHAR}, #{param.parameterType,jdbcType=INTEGER}, #{param.isShow,jdbcType=CHAR},#{param.isModify,jdbcType=CHAR}, #{param.createUserId,jdbcType=VARCHAR}, #{param.memo,jdbcType=VARCHAR},#{param.createdTime,jdbcType=TIMESTAMP}, #{param.updatedTime,jdbcType=TIMESTAMP})</foreach></insert><update id="batchUpdate" parameterType="com.Entity"><foreach item="param" collection="list" separator=";" index="index">update pos_parameter<set><if test="param.storeId != null">store_id = #{param.storeId,jdbcType=VARCHAR},</if><if test="param.posId != null">pos_id = #{param.posId,jdbcType=VARCHAR},</if><if test="param.parameterId != null">parameter_id = #{param.parameterId,jdbcType=VARCHAR},</if><if test="param.parameterName != null">parameter_name = #{param.parameterName,jdbcType=VARCHAR},</if><if test="param.parameterValue != null">parameter_value = #{param.parameterValue,jdbcType=VARCHAR},</if><if test="param.parameterDesc != null">parameter_desc = #{param.parameterDesc,jdbcType=VARCHAR},</if><if test="param.parameterType != null">parameter_type = #{param.parameterType,jdbcType=INTEGER},</if><if test="param.isShow != null">is_show = #{param.isShow,jdbcType=CHAR},</if><if test="param.isModify != null">is_modify = #{param.isModify,jdbcType=CHAR},</if><if test="param.createUserId != null">create_user_id = #{param.createUserId,jdbcType=VARCHAR},</if><if test="param.memo != null">memo = #{param.memo,jdbcType=VARCHAR},</if><if test="param.createdTime != null">created_time = #{param.createdTime,jdbcType=TIMESTAMP},</if><if test="param.updatedTime != null">updated_time = #{param.updatedTime,jdbcType=TIMESTAMP},</if></set>where id = #{param.id,jdbcType=BIGINT}</foreach></update>。
XML读写操作
XML读写操作小结我们知道对XML的操作有两种方法,即DOM方式和SAX方式。
二者主要区别是:DOM实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。
Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,由于在项目中涉及的文件不大,因此我们选用QDomDocument类来处理。
项目中涉及便签的增删改查,对应于XML文件中相应标记的读、写和修改,下面分别介绍:1. 创建节点,将其写入XML文件,主要操作包括:1).创建根节点:QDomElement root = doc.documentElement("rootName " );2).创建元素节点:QDomElement element = doc.createElement("nodeName");3).添加元素节点到根节点:root. appendChild(element);4).创建元素文本:QDomText nodeText=doc.createTextNode("text");5).添加元素文本到元素节点:element. appendChild(nodeText);在本项目中,假设便签的属性有序号、名字、内容、字体、字号、颜色、粗细、斜体、下划线这几项,则在文件中添加一个便签节点的操作如下:QDomDocument doc;instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");doc.appendChild(instruction);QDomElement root = doc.createElement("Notes");doc.appendChild(root);QDomElement note = doc.createElement("note");root.appendChild(note);QDomElement no = doc.createElement("no");note.appendChild(no);......QDomText no_text = doc.createTextNode("001");......则得到一个便签节点,将其保存到test.xml文件中,代码如下:QFile file("test.xml");if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))return ;QTextStream out(&file);out.setCodec("UTF-8");doc.save(out,4,QDomNode::EncodingFromTextStream);file.close();则test.xml文件:<?xml version="1.0" encoding="UTF-8"?><Notes><note><no>001</no><name>2010-05-10(13:53:24)</name><content>A meeting!</content><font>Script MT Bold</font><fontSize>16</fontSize><color> #00ffff</color><weight>0</weight><fontItalic>true</fontItalic><fontUnderline>true</fontUnderline></note></Notes>上面是创建一个便签节点,若要继续添加便签节点,则需要在已有节点后增加一个新节点,并重写入XML文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从结构上讲.XmlElement是XmlNode 派生类. 所以两者比较没什么意义. XmlNode 为抽像类, 不能直接实例化.已知有一个xml文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><PRice>5.95</price></book></bookstore>1、往<bookstore>节点中插入一个<book>节点:XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load("bookstore.xml");XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore> XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点xe1.SetAttribute("genre","李赞红");//设置该节点genre属性xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性XmlElement xesub1=xmlDoc.CreateElement("title");xesub1.InnerText="CS从入门到精通";//设置文本节点xe1.AppendChild(xesub1);//添加到<book>节点中XmlElement xesub2=xmlDoc.CreateElement("author");xesub2.InnerText="候捷";xe1.AppendChild(xesub2);XmlElement xesub3=xmlDoc.CreateElement("price");xesub3.InnerText="58.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<bookstore>节点中xmlDoc.Save("bookstore.xml");//===============================================结果为:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book genre="李赞红" ISBN="2-3631-4"><title>CS从入门到精通</title><author>候捷</author><price>58.3</price></book></bookstore>2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点foreach(XmlNode xn in nodeList)//遍历所有子节点{XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”{xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点foreach(XmlNode xn1 in nls)//遍历{XmlElement xe2=(XmlElement)xn1;//转换类型if(=="author")//如果找到{xe2.InnerText="亚胜";//则修改break;//找到退出来就可以了}}break;}}xmlDoc.Save("bookstore.xml");//保存。
//==================================================最后结果为:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book genre="update李赞红" ISBN="2-3631-4"><title>CS从入门到精通</title><author>亚胜</author><price>58.3</price></book></bookstore>3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;foreach(XmlNode xn in xnl){XmlElement xe=(XmlElement)xn;if(xe.GetAttribute("genre")=="fantasy"){xe.RemoveAttribute("genre");//删除genre属性}else if(xe.GetAttribute("genre")=="update李赞红"){xe.RemoveAll();//删除该节点的全部内容}}xmlDoc.Save("bookstore.xml");//===========================================最后结果为:<?xml version="1.0" encoding="gb2312"?><bookstore><book ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book></book></bookstore>4、显示所有数据。
XmlNode xn=xmlDoc.SelectSingleNode("bookstore");XmlNodeList xnl=xn.ChildNodes;foreach(XmlNode xnf in xnl){XmlElement xe=(XmlElement)xnf;Console.WriteLine(xe.GetAttribute("genre"));//显示属性值Console.WriteLine(xe.GetAttribute("ISBN"));XmlNodeList xnf1=xe.ChildNodes;foreach(XmlNode xn2 in xnf1){Console.WriteLine(xn2.InnerText);//显示子节点点文本}}1.已知有一个xml文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><PRice>5.95</price></book></bookstore>1、往<bookstore>节点中插入一个<book>节点:XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load("bookstore.xml");XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore> XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点xe1.SetAttribute("genre","李赞红");//设置该节点genre属性xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性XmlElement xesub1=xmlDoc.CreateElement("title");xesub1.InnerText="CS从入门到精通";//设置文本节点xe1.AppendChild(xesub1);//添加到<book>节点中XmlElement xesub2=xmlDoc.CreateElement("author");xesub2.InnerText="候捷";xe1.AppendChild(xesub2);XmlElement xesub3=xmlDoc.CreateElement("price");xesub3.InnerText="58.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<bookstore>节点中xmlDoc.Save("bookstore.xml");//================结果为:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book genre="李赞红" ISBN="2-3631-4"><title>CS从入门到精通</title><author>候捷</author><price>58.3</price></book></bookstore>2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。