c++ xml解析 xml解析c语言
XML技术与数据库的发展趋势分析
呵呵。。。说的很模糊,祝你好运。。。如何你是要做Linux C /C++ 的话,我可以给你说几个例子。。。数据库技术及其应用系统经历了从层次数据库 网状数据库到关系数据库以及面向对象数据库的发展 在传统的商业和事务处理领域内逐步成熟 取代了原有的基于文件系统的数据处理方式 成为计算机信息系统中的重要基础和支柱 但随着Internet的飞速发展 Web的出现改变了人们习惯的处理方式 也给数据库技术提出了必须面对的重要问题 即如何有效地存储和管理Web上的数据(文档) 使其既能被高效地作和维护 又能在Internet平台上方便地表示和交换
c++ xml解析 xml解析c语言
c++ xml解析 xml解析c语言
XML技术自出现以来发展非常迅速 在许多领域内得到广泛的支持而有着广阔的应用前景 例如电子数据交换 电子商务等更是将XML作为一种基础性 支柱性的技术来看待
数据库系统是随着计算机技术的不断发展 在特定的历史时期 特定的需求环境下出现的 在 年的台计算机到 世纪 年代这漫长的 年里 计算机作系统主要局限于文件的作 对数据的管理也主要是通过文件系统来实现 进行计算所需要的各种数据存放在各自的文件里 使用这些数据时将文件打开 读取文件中的数据到内存中 当计算完毕后 将计算结果仍旧写入到文件中去 它的不足主要集中在无法对数据进行有效的统一管理 针对文件系统的重要缺点 人们逐步发展了以统一管理数据和共享数据为主要特征的系统 即数据库系统 年 美国通用电气公司开发成功了世界上的个数据库系统IDS(IntegratedDataStore) IDS奠定了网状数据库的基础 并得到了广泛的发行和应用 成为数据库系统发展史上的一座丰碑 年 美国商用机器公司(IBM)也推出世界上个层次数据库系统IMS(InformationMament System) 同样在数据库系统发展史上占有重要的地位
与文件系统相比 数据库系统有几个方面的特点 向用户提供高级的接口 向用户提供非过程化的数据库语言(即SQL语言) 查询的处理和优化 并发控制 数据的完整性约束
进入 年代之后 计算机硬件技术的飞速提高促使计算机应用不断深入 产生了许多新的应用领域 例如计算机辅助设计 计算机辅助制造 计算机辅助教学 办公自动化 智能信息处理 决策支持等 这些新的领域对数据库系统提出了新的要求 但由于应用的多元化 不能设计出一个统一的数据模型来表示这些新型的数据及其相互关系 因而出现了百家争鸣的局面 产生了演绎数据库 面向对象数据库 分布式数据库 工程数据库 时态数据库 模糊数据库等新型数据库的研究和应用
XML
XML标准 版发布于 年 月 之后迅速在全球掀起了XML应用的浪潮 XML是一种描述型的标记语言 与HTML同为SGML(标准通用标记语言 ISO 标准)的一种应用 由于XML在可扩展性 可移植性和结构性等方面的突出优点 它的应用范围突破了HTML所达到的范围
一篇XML文档由标记和内容组成 XML中有六种标记 元素(elements) 属性(attributes) 实体引用(entityreferences) 注释(ments) 处理指令(processinginstructions)和CDATA段(CDATAsections) XML与HTML最显著的不同是XML文档中引入了 文档类型声明 (Document Type Declarations) DTD使文档可以与分析器交流关于它的内容的元信息 DTD的出现 赋予了XML文档可扩展性 结构性和可验证性 使XML具备了类似于数据库的一些性质 可以利用XML来组织和管理信息 又可以与HTML一样在浏览器中方便地表示 在Internet上高效地传递和交换 考虑到与HTML的兼容 DTD并不是XML文档必需的成份 具有DTD的XML文档称作 Valid 否则就是 Well formed
目前 处理XML文档的方式主要有SAX与DOM两种 SAX(SimpleAPIforXML)是一种基于流的 以处理方式工作的接口 SAX 在 年 月发布 增强了许多功能 包括对名字空间的支持 DOM(Document Object Model)则是在对XML文档进行分析后 在内存中建立起一个完整的树结构 然后在此基础上进行各种作 简单地比较来看 SAX对系统资源要求低 速度快 但对文档的作是只读的 DOM的处理能力强大 但要求大量的系统资源 尤其是对于大的文档 而后还出现了Xpath和Xpointer用以完成XML的搜索和转换 XSL XSLT和SOAP用以完成XML的远程对象访问 XML Query Languages的出现使XML查询语言可用于任何XML文档
XML与数据库
XML文件是数据的 它是自描述的 可交换的 能够以树型或图形结构描述数据 XML提供了许多数据库所具备的工具 存储(XML文档) 模式(DTD XMLschema RE AXNG等) 查询语言(XQuery XPath XQL XML QL QUILT等) 编程接口(SAX DOM JDOM)等 但XML并不能完全替代数据库技术 XML缺少作为实用的数据库所应具备的特性 高效的存储 索引和数据修改机制 严格的数据安全控制 完整的事务和数据一致性控制 多用户访问机制 触发器 完善的并发控制等 因此 尽管在数据量小 用户少和性能要求不太高的环境下 可以将XML文档用作数据库 但却不适用于用户量大 数据集成度高以及性能要求高的作业环境
随着Web技术的不断发展 信息共享和数据交换的范围不断扩大 传统的关系数据库也面临着挑战 数据库技术的应用是建立在数据库管理系统基础上的 各数据库管理系统之间的异构性及其所依赖作系统的异构性 限制了信息共享和数据交换范围 数据库技术的语义描述能力 大多通过技术文档表示 很难实现数据语义的持久性和传递性 而数据交换和信息共享都是基于语义进行的 在异构应用数据交换时 不利于计算机基于语义自动进行正确数据的检索与应用 数据库属于高端应用 需要昂贵的价格和运行环境 而随着网络和Internet的发展 数据交换的能力已成为新的应用系统的一个重要的要求 XML的好处是数据的可交换性(portable) 同时在数据应用方面还具有如下优点 ( )XML文件为纯文本文件 不受作系统 软件平台的限制 ( )XML具有基于Schema自描述语义的功能 容易描述数据的语义 这种描述能为计算机理解和自动处理 ( )XML不仅可以描述结构化数据 还可有效描述半结构化 甚至非结构化数据
XML文件的存储
XML文件的存储方式有三大类 ( )将文件存储于文件系统(StoringDocumentsinthe File System) ( )将文件存储于BLOB(Storing Documents in BLOBs) 利用数据库的事务管理 安全 多用户访问等优点 此外许多关系数据库提供的检索工具可以进行全文检索 近似检索 同义词检索和模糊检索 其中某些工具将会支持XML 这样就可消除将XML文件作为纯文本检索所带来的问题 ( )将文件存储于原生XML数据库(Native XML Databases NXD) NXD是专用于存储XML文件的数据库 支持事务管理 安全 多用户访问 编程API和查询语言等 与其它数据库的区别在于其内部模型是基于XML的 其中 最重要的存储方式当属原生XML数据库
原生XML数据库
原生XML数据库(NativeXMLDatabases)为XML文档定义了一个(逻辑)模型 并根据该模型存取文件 这个模型至少应包括元素 属性 PCDATA和文件顺序 其例子有XPath数据模型 XMLIn foset以及DOM所用的模型和SAX 的 它以XML文件作为其基本存储单位 对底层的物理存储模型没有特殊要求 例如 它可以建在关系型 层次型或面向对象的数据库之上 或者使用专用的存储格式 比如索引或压缩文件
NXD最适于存储以文档为中心的文件 这是由于NXD保留了文件 顺序 处理指令 注释 CDA TA块以及实体引用等 而支持XML的数据库XED(XML enableddatabase)无法做到 XED是在原有数据库基础上扩展了XML支持模块 完成XML数据和数据库之间的格式转换和传输 从存储粒度上 可以把整个XML文档作为RDBMS表中一行 或把XML文档进行解析后 存储到相应的表格中 为了支持W C的一些XML作标准 Xpath XED提供一些新的原语(如Oracle iR 增加了一些数据包来作XML数据等) 并优化了XML处理模块
NXD一般采用层次数据存储模型 保持XML文档的树形结构 省掉了XML文档和传统数据库的数据转换过程 NXD还适用于存储 天然格式 为XML的文件 NXD还可以存储半结构化数据 在某种特定情形下提高存取速度以及存储没有DTD的文件(良构的文件)
原生XML数据库的结构可分{xmlDocument xmlNew=xmlNewDoc(BAD_CAST"1.0");为两大类 基于文本的和基于模型的
基于文本的NXD(Text BasedNativeXMLDatabases)将XML作为文本存储 它可以是文件系统中的文件 关系数据库中的BLOB或特定的文件格式 基于文本的NXD与层次结构的数据库很相似 当存取预先定义好层次的数据时 它比关系数据库更胜一筹 和层次结构的数据库一样 当以其它形式比如转置层次存取数据时 NXD也会遇到麻烦 这个问题的程度尚未可知 很多关系数据库都使用逻辑指针 使相同复杂度的查询以相同的速度完成
基于模型的NXD(Model BasedNativeXMLDatabases)是根据文件构造一个内部模型并存储这个模型 有些数据库将该模型存储于关系型和面向对象的数据库中 例如在关系型数据库中存储DOM时 就会有元素 属性 PCDATA 实体 实体引用等表格 其他数据库使用了专为这种模型优化了的存储格式 使用专用存储格式的基于模型的NXD如果以文件的存储顺序读取文件 其性能与基于文本的NXD相似
原生XML数据库的特性
原生XML数据库的特性(FeaturesofNativeXML Databases)有 ( )文件集(Document Collections) 支持(Collection)的概念 其作用相当于关系数据库中的表和文件系统中的文件夹 ( )查询语言(Query Languages) 最常用的有XPath(对多个文件的查询作了扩充)和XQL 以及专有的查询语言 ( )更新和删除(Updates and Deletes) NXD对文件的更新和删除方式从简单的替换或删除现有文件 到修改当前活动的DOM树 以及用于指定如何修改文件片断的语言 ( )事务 锁定和并发(Transactions Locking and Concurrency) 支持事务处理 锁定通常是对整个文档的 所以多用户并发性相对较低 问题的大小取决于应用程序以及 文件 的构成 ( )原生数据库提供应用程序接口API(Application Programming Inteces APIs) ( )NXD的一个重要特性是它可以为XML文档提供 往返车票(round trip) 可以将XML文件存放在NXD中 而且再取回 同样的 文件 对于以文档为中心的应用程序来说非常重要 因为CDATA部分 实体用法 注释和处理指令是这些文档不可缺少的组成部分 特别是对于法律和医学文件 按规定这些文档必须要保持原样 ( )外部数据(Remote Data) 某些NXD可包含有外部数据 它来自存储在数据库中的文档 通常这些数据通过OD BC OLE DB或JDBC从关系数据中取出 模型可以是基于表格的或对象 关系型映射 ( )支持元素和属性的索引
结论
XML技术的出现 使数据处理从文件方式到数据库系统再到文件方式的循环 但新的文件方式已经与最初的文件系统有了本质的区别 格式化文档 XML和关系数据库在数据应用和数据管理方面各有优势
lishixinzhi/Article/program/net/201311/12776
怎么解析通过WebServ传递的XML格式的字符串
<2>.JSON的缺点如果是客户端调用端的方法,返回值是xml字符串
你需要确定xml字符串是不是个对象,如果不是对象那你要写代码组装这个XML字符串,你可以用dom4j 等技术解析xml字符串,网上很多解析代码
如果xml字符串是个对象,使用XStream在Ja对象和XML之间相互转换,
XStream地址:
如果是方法参数是xml字符串,同理
如果是对象用XStream
否则用dom4jXML dom 等 技术解析或组装
工具类:
解析的工具是:XMLSpy
你应该有一个XSLT格式的transformation文件,有了这个文件,加上XMLSpy和XML文件,我们就可以开始转换了。
转换步骤如下:
用XMLSpy打开XML 在XMLSpy上点击XSL菜单然后选择"Assign XSL"
按F10快捷键转换
这样XML文件就依据XSLT模板转换成了程序需要的格式了。
还有什么不知道的欢迎追问。
传递XML格式字符串可以用好几种办法解决, 流可以搞定, 但是麻烦点,
我可以直接给你个工具类, 然后直接用这个工具类就可以解析出来.
ParseXMLUtil.ja
package com.jlh.mall.utils;
import org.apachemons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class ParseXMLUtil {
private static final Logger logger = LoggerFactory.getLogger(ParseXMLUtil.class);
/
获取xml中某个元素的值
/
public static String getXmlValue(String xml, String name) {
if (StringUtils.isBlank(xml) || StringUtils.isBlank(name)) {
return "";
}int start = xml.indexOf("<" + name + ">");
start += (name.length() + 2);// 去掉本字符串和"<"、">"的长度
int end = xml.indexOf("" + name + ">");
if (end > start && end <= (xml.length() - name.length() - 2)) {
return xml.substring(start, end);
} else {
return "";
}}
}
看你用什么框架。
如果是用spring
可以用
org.springframework.web.servlet.view.xml.MarshallingView
配合
org.springframework.oxm.jaxb.Jaxb2Marshaller
用注解实体类方式来解析
通过@XmlRootElement注解XML根目录
通过@XmlElement注解XML属性值
@XmlRootElement(name="") -> ""中写的是XML根名称
pubic class xml_model(){
private String username; ->名字符合你元素名称
private String password;
(在GET上)
@XmlElement ->注解为元素
public String getUsername(){
return username;
}SET
}数据格式
password-->元素
用这个方法解析XML
public static
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
throw new Exception("请求参数解码失败.请确认后重试");
}return t;
}当然我这个是JAVA + SPRING 来的。希望能够帮到你。
相关JAR包自己查下吧。
可以使用Xml进行解析
建立 xml相对应的pojo(带注解)
通过org.framework.xml.Serializer 对象,进行read,则自动会将对应的xml数据
封装到对应的pojo中。
需要注意的是,pojo类的编写,@Root 和@Element中的name值需要和xml的名字一致
他们调用我们提供的WebServ,方法为 string SendAData(string PsoData),他们传递了string类型的参数(里面是xml格式的),我这边怎么处理比较好?怎么序列化?
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(result);
JSONObject jsonObj = JSONObject.fromObject(json);
JSONObject obj = JSONObject.fromObject(result);
String code = "";
try{code = obj.getString("code");}catch(Exception e){}
System.out.println(code);
XML格式的用dom4j解析
JDOM解析XML 怎样设置转义字符
GET方法如果你通过某种方法,取得了路径和文件名,路径是单斜杠,现在要去掉文件名,单斜杠变双斜杠。例如 C:Usrproga.txt 变 C:Usrprog 程序如下: #include #include main(){ char p[100] ={'C',':',0x5c,'U','s','r',0x5c,'p','r','o','g',...
原生XML数据库的结构jaxbcontext 解析xml 性能怎么样
1.内容中含有xml预定好的实体,如“<”和“&”,对xml来说是禁止使用的,针对这种字符,解决方式是使用CDATA部件以""标记结束,是CDATA内部内容被解析器忽略。具体说明参考《XML CDATA是什么?》。JAXB中的继承问题
问题
JAXB是我用过的ja处理XML的方法中做方便的一个,在jaxb中如何使用类的集成关系有一个小小的需要注意的地方。看下面的两端XML。
示例1:
XML示例2:
这两段XML的别就在c元素与d元素。为了生成这两个XML,有几种方案。
方案一
不利用类的继承来重用代码,写两套Ja代码, 如:
@XmlRootElement(name = a)
public class A
{B b;
Ctxt=doc.nodeValue;获取元素的值 c:
}@XmlRootElement(name = a)
public class A2
{B b;
D d:
}public class B {}
public class D {}
这一方案不是我们想要的,虽然可以解决问题,但是不能重用两个XML有的结构。
方案二
利用一个父类表示两个XML之间的共同的结构,用两个子类扩展这个父类,分别添加 C 和 D
元素。
代码如下:
@XmlRootElement(name = “a”)
public class A {
Bb;
}public class B {}
public class C {}
public class D
{}
public class E extends A {
C c;
}public class F
extends A {
D d;
}这一方案看似很直观,但是实践中却发现 E 和 F 却都只能生成 父类的
部分,如下的XML:
即使把 @XmlRootElement(name = “a”) 移到 E 和 F类上也行不通。
方案三
用一个类代表共同的结构,用一个父类代表C和D元素,在用两个类代表具体化的C和D类,如:
@XmlRootEelemnt(name =
“a”)
public class A {
B b;
@XmlElements({
@XmlElement(name =
“c”, type=C.class),
@XmlElement(name = “d”, type=D.class)
})
Ee;
}public class B {}
public class E {}
public class C extends
E {}
public class D extends E {}
这样做才最终达到目的。关键点就是@XmlElements的使用。
求 C++读写取XML 文件方法!网上的让开
{xmlSingleNode xmlNew=xmlNewNode(NULL,BAD_CAST+xmlElementText);//纯c的:
//创建新文档
xmlDocument xmlNewDocument()
xmlNew->encoding =(const xmlString)"utf-8";
return xmlNew;
}//获取文档根
xmlSingleNode xmlSingleNodeDocRoot=xmlDocGetRootElement(Doc);
//设置根
xmlSingleNode xmlSetRootNode(xmlDocument Doc,xmlSingleNode xmlRootNode)
//创建
xmlSingleNode CreateElement(char xmlElementText)
return xmlNew;
}//添加孩子结点
xmlSingleNode xmlAddChild(xmlSingleNode ParentNode,xmlSingleNode xmlNewNode);
//获取属性值
char xmlGetProp(xmlSingleNode xmlCurNode,(xmlString)xmlNodeAttrName);
XmlAttribute xmlNewProp(xmlSingleNode XmlCurNode,char xmlElementAttributeName,char xmlElementAttributeValue);
//设置属性
XmlAttribute xmlSetProp(xmlSingleNode XmlCurNode,char xmlElementAttributeName,char xmlElementAttributeValue);
//加载xml
xmlDocument xmlParseFile(char xmlFilePath);
//保存一个xml文件
int Se(const char filename,xmlDocument Doc);
//c#的:
xmlDoc = new XmlDocument();
xmlDoc.Load(@"F:SegyML.xml");
x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
x.appendChild(node) - 向 x 插入子
x.removeChild(node) - 从 x 删除子
offset=xmlDoc.getElementsByTagName(
createElement() 方法创建新的元素。
createTextNode() 方法创建新的文本。
appendChild() 方法向添加子(在一个子之后)。
下面的代码片段将删除个
x.removeChild(x.childNodes[0]);
XPath 使用路径表达式在 XML 文档中选取。是通过沿着路径或者 step 来选取的。
xmlDoc.selectNodes(路径表达式) ;
xmlDoc.selectNodes("/bulkdata/record");
以上均为我常用的函数。即使在c++里,我也多喜欢用纯C的函数,把xmlDom里的有时候自己封装了一下就用了。
额。。。Linux 下 有 XML 封装,解析等作的库, libxml-2.0 额。。里边的接口就可以实现XML文件的创建和读写等。。。你看看是不是满足你的要求, C++下估计也有相关的库可用。。。
xml代码发不出去
//为某添加属性在解析xml时,经常因为文件中含特殊字符而解析失败。原因有两个:一是内容中含有XML预定义好的实体,二是内容中含有低位非打印字符。
2.内容中含有低位非打印字符,解析时会报错:""(十六进制值 0x1D)是无效的字符.加载或保存XML时引发的异常.System.x=xmlDoc.getElementsByTagName(“record")[0];ArgumentException: “”(十六进制值 0x1D)是无效的字符。
出错的原因是内容中含有低位非打印字符,处理方法是对其进行过滤,过滤方法为:
return System.Text.RegularExpressions.Regex.Replace(str,@"[x00-x08]|[x0B-x0C]|[x0E-x1F]";
JSON与XML解析有什么本质的区别
年代初 E F Codd在总结前面的层次 网状数据库优缺点的基础上 提出了关系数据模型的概念及关系代数和关系演算 在 年代 关系数据库系统无论从理论上还是实践上都取得了丰硕的成果 在理论上确立了完整的关系模型理论 数据依赖理论和关系数据库的设计理论 在实践上 世界上出现了很多的关系数据库系统 比较的如SystemR INGRES Oracle等XML和Json的本质的区别
数据库简史(1).XML的优缺点
<1>.XML的优点
A.格式统一,符合标准;
B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.端和客户端都需要花费大量代码来解析XML,导致端和客户端代码变得异常复杂且不易维护;
C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
D.端和客户端解析X费较多的资源和时间。
(2).JSON的优缺点
<1>.JSON的优点:
A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
B.易于解析,客户端JaScript可以简单的通过eval()进行JSON数据的读取;
C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Ja, JaScript, Perl, PHP, Python, Ruby等端语言,便于端的解析;
D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
E.因为JSON格式能直接为端代码使用,大大简化了端和客户端的代码开发量,且完成任务不变,并且易于维护。
A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
B.JSON格式目前在Web Serv中推广还属于初级阶段。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。