XML学习总结
姓名:王焕焕学号:
专业:信息管理与信息系统班级: 20082673 08信管班
一、XML的概念
XML是Extensible Markup Language的缩写,是一种扩展性标记语言。 XML文件是由标记及其所标记的内容构成的文本文件,标记可自由定义,其目的是使得XML文件能够很好地体现数据的结构和含义。推出XML的主要目的是使得Internet网络上的数据相互交流更方便,让文件的内容更加显而易懂。
XML是一种可以用来创建自己的标记的标记语言,它由W3C(全球信息网联盟)创建。它是SGML的子集,在web上以HTML的方式被传送、接收和处理
Xml是一种元语言,用户可以定义自己需要的标记,只要这些标记满足XML语法,基于XML很多行业都定义了自己的标记语言,如数学家们定义了MathXL,化学家定义CML。它是用来存储数据和交换数据的。
二、XML的特点
1.良好的格式
XML文件格式属于良好格式的文件。XML标记一定是成双成对的。
2.具有验证机制
XML的标记是程序员自己定义的,标记的定义和使用是否符合语法,需要验证。
XML有两种验证方法。一种是DTD(Document Type Definition),即文档类型定义,DTD是一个专门的文件,用来定义和检验XML文件中的标记。另一种是XML Schema,用XML语法描述。它比DTD更优越,多个Schema可以复合使用XML名字空间,可以详细定义元素的内容及属性值的数据类型。
3.灵活的WEB应用
在XML中数据和显示格式是分离设计的,XML元数据文件就是纯数据的文件,可以作为数据源,向HTML提供显示的内容,显示样式可以随HTML的变化而丰富多彩。也就是说,HTML描述数据的外观,而XML描述数据本身,是文本化的小型数据库表达语言。HTML数据和显示格式混在一起,显示出一种式样。XML采用的TAG是自己定义的,这样我们的数据文件的可读性就能大大提高,也不再局限于HTML文件那些标准的TAG了。由于XML是一个开放的基于文本的格式,它可以和HTML一样使用HTTP进行传送,不需要对现存的网络进行变化。
4.丰富的显示样式
XML数据定义打印、显示排版信息主要有3种方法: 用CSS定义打印和显示排版信息;用XSLT转换到HTML进行显示和打印;用XSLT转换成XSL的FO(Formatter Object) 进行显示和打印。
5.XML允许开发各种不同专业的特定领域的标记语言,有了这些语言,这个领域的专业人士就可以自由地交换数据。
2
6.XML是非专有的,易于阅读和理解。
7. XML与平台无关。
三、XML的应用前景
1.网络服务领域
XML有利于信息的表达和结构化组织,从而使数据搜索更有效。XML可以使用URL别名使WEB的维护更方便,也使WEB的应用更稳定,XML可以使用数字签名使WEB的应用更广阔。而XML的广泛使用必然能推动WEB不断发展,从而开创WEB应用的新时代。
2.EDI(电子数据交换)
使用XML,程序能够理解在交换数据中所表示的商务数据及概念,根据明确的商务规则来进行数据处理并给出适当的回音。基于XML的数据交换是构造电子商务应用的有效而可行的途径。而且XML能够和现有的EDI系统相结合,并扩展现有的EDI应用。
随着XML技术的发展和普及,可以预见到XML数据必定成为将来网络上商业数据交换的首选,XML数据接口会成为所有商业软件的标准配置 。
3. 电子商务领域
XML的丰富置标完全可以描述不同类型的单据,结构化的XML文档发送至Web的数据可以被加密,并且很容易附加上数字签名。因此,XML有希望推动EDI(Electronic Data Interchange)技术在电子商务领域的大规模应用。
4.数据库领域
XML—数据库—网页或文档中的表格这三者可以互相转换。
5.Agent(智能体)
XML能够更准确地表达信息的真实内容,其严格的语法降低了应用程序的负担,也使智能工具的开发更为便捷。
XML语言只是一种简单的不能再简单的信息描述语言,可准确的表示几乎所有类型的数字化信息,可以清晰地解释信息的内涵和信息之间的关联。
6. 软件设计元素的交换
XML也可以用来描述软件设计中有关的设计元素 ,如对象模型,甚至描述最终设计出来的软件。可将这些成果在不同的设计组之间进行传输。
3
7. 配置文件
可将配置的数据方便地集成到应用程序中。
四、XML的发展历史
可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,起源于SGML(Standard Generalized Markup Language),是SGML的一个子集合,也就是SGML的一个简化版本,非常适合于在Web上或者其它多种数据源间进行数据的交换。
19xx年,IBM公司开发了一种文档描述语言GML(Generalized Markup Language),用来解决不同系统中文档格式不同的问题,并在19xx年成为了一个国际标准〔ISO8879〕,这就是SGML。SGML是很多大型组织的文档标准,它是一种与语言无关的、结构化的、可扩展的语言,这些特点使它在很多公司受到欢迎,被用来创建、处理和发布大量的文本信息。
19xx年,在CERN欧洲粒子物理研究中心的研究人员开发了基于SGML的超文本版本,称为HTML( HyperText Markup Language)。HTML继承了SGML的许多重要的特点,比如结构化、实现独立和可描述性,但是它也存在很多缺陷,比如它只能使用固定的有限的标记,而且它只侧重于对内容的显示方面。
随着Web上数据的增多,HTML存在的这些缺点越来越突出。W3C的成员认识到,必须有一种方法能够把数据本身和数据的显示分离开来,这样W3C在19xx年提出了XML的概念。XML不仅保留了SGML的很多优点,而且更加容易操作以及在World Wide Web环境下实现。19xx年,XML成了W3C的推荐标准。
五、XML语法基本点
1.XML要遵循规则W3C推荐规则规定的XML语法 ;
2.XML文档只能包含一个根元素 ;
3.所有XML元素必须包含结束标记 ;
4.元素的开始标记和结束标记的名称必须相同;
5.XML元素不能重叠;
6.所有属性值都必须使用引号。
六、XML的技术规范
XML并不仅仅包括XML标记语言,它同时还包括了很多相关的规范,比如文档模式技术、文档样式技术、文档查询技术、文档解析技术、文档链接技术以及文档定位技术等。基于XML的这些规范,还有很多高层的应用协议,比如SOAP(Simple Object Access Protocol)和BizTalk等。
1. 文档模式技术:
DTD(Document Type Definition)和XML Schema是XML文档的模式,用来 4
对XML文档的逻辑结构进行定义。XML文档的模式规定了XML文档中的元素、属性、元素和元素以及元素和属性之间的关系。其中,DTD来自SGML,XML Schema是专门为定义XML文档的模式而设计的,采用的是XML的语法。
2.文档样式技术:
XML是内容(数据)和显示格式分离的语言,CSS(Cascading Style Sheets)和XSL(Extensible Stylesheet Language)就是定义XML文档的显示样式的。其中,CSS是随着HTML的出现而产生的,控制XML文档的显示,但不会改变源文档的结构。而XSL是专门为XML设计的,不仅用来显示XML文档,而且可以把一个XML文档转化为另一个XML文档。
3. 文档查询技术:
W3C推荐的XML文档的查询语言是XQuery1.0。XQuery起源于一种叫Quilt的XML查询语言,借鉴了XPath 1.0、XQL、XML-QL、SQL和OQL等语言的优点。
4. 文档解析技术:
文档解析是指对XML文档的内容和结构进行访问和分析。文档解析技术包括文档对象模型DOM(Document Object Model)和SAX(Simple API for XML)。DOM是一种对平台和语言中立的接口,它是基于XML文档在内存中的树状结构,它的一个主要不足在于将整个XML文档装入内存所引起的巨大开销。而SAX使用事件驱动的XML解析,并不要求将整个XML文档一起装入内存。
5. 文档链接技术:
XML的链接功能比HTML更强大,它使用XLINK。XML Linking Language 1.0 (XLink)是W3C主导的定义XML链接的语法。一个XLink的描述信息,显式的指定了资源或部分资源之间的关系。在XLink中,并不涉及标示不同类型数据位置的方法,XLink需要依靠不同的机制来标识你想要链接的资源(例如统一资源标识符)。W3C推出了另一种叫做XML Pointer Language(XPointer)的机制用于构造XML文档的内部结构。它可以链接到一个具体的对象上去,这个对象可以是一个网页、网页的一部分、网页中的一个元素甚至是网页中某行的某几个字。
6. 文档定位技术:
XML Path Language(XPath)1.0是一种用于XSL Transformations (XSLT)1.0和XPointer中对XML文档各部分进行定位的语言。它给XSLT和XPointer提供一种定位语法,用来定位XML文件的各个部分。
7. 其他XML技术:
5
① MathML Math(Mathematical Markup Language)2.0是一种用来描述数学符号、结构和内容的XML应用。MathML的目标是在Web上实现能像HTML处理文本一样,处理数学问题。
② SMIL SMIL(Synchronized Multimedia Integration Language)2.0是一种基于XML的表述多媒体演示的语言。SMIL允许将一组独立的多媒体对象整合为一个多媒体演示。
③ VML VML(Vector Markup Language)是一种定义矢量信息编码格式的矢量标记语言,它是XML在矢量信息方面的应用。VML所定义的编码格式连同其它的标记一起描述了信息如何显示和编辑。
④ CDF CDF(Channel Definition Format)允许Web发布者从任意的Web服务器经常的更新信息或是频道,以便这些信息能从Web服务器自动的传送到PC上的兼容接受程序或是其他的信息装置上。用户仅需选择一下频道,信息就会定时地传递到客户端。
⑤ XML片段交互 XML Fragment Interchange标准支持由若干实体组成的逻辑文档。XML片断交互使得客户端可以不用涉及整篇文档,就能在一篇较大的文档中获得文档片断所处的上下文信息。
⑥HTML XHTML2.0 Markup Language是符合XML的HTML文档中的又一个家族。XHTML文档被设计成可以和XML处理器协同工作。XHTML文档是结构良好的XML,可以使用标准XML处理器对它们进行查看、编辑或验证。
七、XML开发和应用环境
XML的开发应用环境包括XML编辑工具、验证工具、解析工具和浏览工具4项内容。
1. XML编辑工具
XML编辑工具是XML最基本的工具,负责编辑XML文档。由于XML文件是文本文件,所以具有文本编辑功能的编辑器都可以使用,最简单的就是Windows记事本。常用的XML编辑工具:
(1) XMLwriter
(2) XML Spy
(3) Stylus Studio
(4) Visual XML
(5) Microsoft XML Notepad
(6) Xray
(7) Editplus
6
2. XML验证工具
为了使得定义的XML文档是有效的,通常必须为它定义一组语法,这种语法规定这类文档应该包含那种类型的数据,数据的层次结构又是怎样的,以及各层次标记和数据的数量、选择性、缺省值等等。因此,XML文档需要通过专门的工具来验证其合法性。常用的验证工具有:
(1) Microsoft XML Validator
(2) Microsoft XSL Debugger
3. XML解析器
解析器是XML和应用程序之间的软件单元、桥梁。XML解析器负责检查一个XML文档,首先它检查XML数据是否符合句法规则,确保开始标记有与其匹配的结束标记,确保文档是格式正确的。大多数解析器还根据文档类型定义(Document Type Definition,DTD)或XML Schema进行确认,核实其结构和内容是语法定义文档所指定的。XML解析器可以减轻应用程序处理XML数据的负担,同时把XML数据的内容和结构以规定的方式送到第二层(XML应用层)。常用的XML解析器:
(1) Oracle XML Parser for java
(2) Microsoft MSXML
4. XML浏览工具
一般的XML编辑软件都能浏览XML。Microsoft XML Tree Viewer是一个典型的XML浏览器,可以把XML文档的内容用树的结构形式显示出来。
Internet Explorer浏览器已经具有很强的XML文档浏览功能,也是人们主要采用的。一般不需要使用别的浏览工具。
大型开发工具.NET体系、PowerBuilder、JBuilder等都支持XML,具有XML的编辑、验证、解析和浏览功能。
7
第二篇:SQL SERVER XML学习总结
SQL SERVER XML学习总结
最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的
Service Broker技术,在熟悉使用该技术的同时,又用到了Sql server xml的一些知识,
这两天在家,把这个sql xml的一些知识给学习了一下,下边是一些学习过程中的总结,希
望能给大家带来一些帮助。
测试用的数据
?
1 use TestDB
2
3 go
4
5 create Table TbFroXML(id uniqueidentifier primary key,name nvarchar(50),[type] nva6
7 go
8
9
10
11 insert into TbFroXML values(NEWID(),'BBen','MG')
12
13 insert into TbFroXML values(NEWID(),'BB','MG')
14
15 insert into TbFroXML values(NEWID(),'Olive','MG')
16
17 insert into TbFroXML values(NEWID(),'今天','NMG')
18
19 insert into TbFroXML values(NEWID(),'明天','NMG')
20
21 insert into TbFroXML values(NEWID(),'未来','NMG')
22
23 insert into TbFroXML(id,name) values(newid(),'笨笨')
24
25 go
26
27 1. For Xml Path
28
29
30 --无名称列,针对行集合中的每一行生成一个对应的row元素,格式:<row>1</row> 31
32 select 1 for xml path
33
34
35
36 --生产格式<row><name> XXX</name></row>
37
38 select name from TbFroXML for xml path
39
40
41
42 --去掉name标签,只剩下row标签,格式:<row>BBen</row><row>BB></row><row>Olive</ro43
44 select name+'' from TbFroXML for xml path
45
46
47
48 --只生成要查询的列的数据,去掉row元素,格式:BB未来明天今天BBenOlive
49
50 select name+'' from TbFroXML for xml path('')
51
52
53
54 --生成格式:<row id='XXXXXXX'><name>BBen</name></row>
55
56 select id as '@id',name from TbFroXML for xml path
57
58
59
60 --以NMG标记作为行标记,格式:<NMG><name>BBen</name></NMG><NMG><name>未来</name></61
62 select name from TbFroXML for xml path('NMG')
63
64
65
66 --以NMG标记作为行标记,以Mg标记作为内标记,格式:<NMG><MG>BB</MG><NMG><NMG><MG>未67
68 select name as MG from TbFroXML for xml path('NMG')
69
70
71
72 --生成格式:<row><BBen><Olive>BB</Olive></BBen></row>
73
74 select name as 'BBen/Olive' from TbFroXML for xml path
75
76
77
78 --生成格式:<row id='*****'>BB></row><row id='*******'>未来</row>
79
80 select id as '@id',name as '*' from TbFroXML for xml path
81
82
83
84 --被指定为列名的路径为data(),则在生成的XML 中,该值将被作为一个原子值来处理, 85
86 --生成格式:<row id='*****' name="BB"><name>BB</name>MG</row>
87
88 select id as '@id',name as '@name',name,[TYPE] as 'data()' from TbFroXML for xml p89
90 --默认情况下,列中的Null 值映射为“缺少相应的属性、节点或元素,使用ELEMENTS 指令请91 xmlns:xsi="/2001/XMLSchema-instance" id="7B890E0B-C470-4E93-89A4-3041B92
93 select id as '@id',null as 'xx/null',name as 'xx/name',[TYPE] as 'xx/type' from Tb94
95
96
97 --ROOT('oo'),--指定向产生的XML 中添加单个顶级元素
98
99 select id as '@id' ,name from TbFroXML for xml path,root('oo')
100
101
102
103 2. For Xml Row/Auto模式
104
105
106 --auto模式,格式:<TbFroXML id="41D6A175-C079-4861-9C75-2EE48A62C3BC" name="BB" t107
108 select * from TbFroXML for xml auto
109
110
111
112 --elements选项,将每列值都映射为〈row>元素的子元素,格式:<TbFroXML><id>41D6A175-C113
114 select * from TbFroXML for xml auto,elements
115
116
117
118 --row 模式:格式:<row><id>7B890E0B-C470-4E93-89A4-3041B70E8DF3</id><name>笨笨</na119
120 select * from TbFroXML for xml raw,elements
121
122
123
124 --elements选项,值为XSINIL 时,将结果集中的值为null 的列映射为xsi:nil=true属性125 xmlns:xsi="/2001/XMLSchema-instance"><id>41D6A175-C079-4861-9C75-2EE48126
127 select * from TbFroXML for xml raw, elements xsinil
128
129
130
131 --xmldata:结果请求架构
132
133 select * from TbFroXML for xml raw,xmldata
134
135
136
137 --xmlschema:结果请求架构
138
139 select * from TbFroXML for xml raw,xmlschema
140
141 3. For XML Explicit
142 select 1 as Tag,
143
144 NULL as Parent,
145
146 3 as [node!1] --[node!1]代表的是根节点,node为节点名,代表节点层次结构的节147
148 for xml explicit
149
150
151
152 select 1 as Tag,
153
154 null as Parent,
155
156 Null as [root!1],
157
158 null as [node!2!id!element]--[node!2!id!ELEMENT]node 代表的是节点名称;2代表159 性。
160
161 union all
162
163 select 2 as Tag,
164
165 1 as Parent,
166
167 null,
168
169 id
170
171 from TbFroXML where id!=null for xml explicit
172
173 4. XPath
174 XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者175
176 4.1 选取节点
177 下面列出了最有用的路径表达式:
178
179 表达式
180
181 描述
182
183 nodename
184
185 选取此节点的所有子节点。
186
187 /
188
189 从根节点选取。
190
191 //
192
193 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
194
195 .
196
197 选取当前节点。
198
199 ..
200
201 选取当前节点的父节点。
202
203 @
204
205 选取属性。
206
207 4.2 谓语(Predicates)
208 谓语用来查找某个特定的节点或者包含某个指定的值的节点。 209
210 谓语被嵌在方括号中。
211
212 例: /root/Info/user[1]
213
214 4.3 选取未知节点
215 XPath 通配符可用来选取未知的 XML 元素。
216
217 通配符
218
219 描述
220
221 *
222
223 匹配任何元素节点。
224
225 @*
226
227 匹配任何属性节点。
228
229 node()
230
231 匹配任何类型的节点。
232
233 例:/root/info/* info节点下的所有元素节点
234
235 /root/info/@* info 节点下所有的属性节点
236
237 //user[@*] 所有带有属性的user节点
238
239 4.4 选取若干路径
240 通过在路径表达式中使用“|”运算符,您可以选取若干个路径。 241
242 例://User | /root/Info/@id
243
244 5. XQuery
245 5.1 基本的查询
246 DECLARE @dataSource XML
247
248 SET @dataSource='
249
250 <root>
251
252 <info id="1">
253
254 <user uid="001">
255
256 <name>笨笨</name> 257
258 <type>MG</type>
259
260 </user>
261
262 </info>
263
264 <info id="2">
265
266 <user uid="002">
267
268 <name>Olive</name> 269
270 <type>MG</type>
271
272 </user>
273
274 </info>
275
276 <info id="3">
277
278 <user uid="003">
279
280 <name>墨遥</name> 281
282 <type>NMG</type>
283
284 </user>
285
286 </info>
287
288 </root>'
289
290 --获取root所有子节点
291
292 select @dataSource.query('.') 293
294 select @dataSource.query('root') 295
296 select @dataSource.query('/root')
297
298
299
300 ----获取所有的info节点
301
302 select @dataSource.query('//info')
303
304
305
306 ----获取所有info节点下user节点的name节点
307
308 select @dataSource.query('//info/user/name')
309
310
311
312 ----获取所有uid>1的所有Info节点
313
314 select @dataSource.query('/root/info[./user[@uid>1]]')
315
316 if then else 表达式
317
318 select @dataSource.query('if (1=3) then /root/info[./user[uid=1]] else /root/info[319
320
321
322 --路径表达式步骤中的谓词,获取第一个info节点下的user节点下的name
323
324 select @dataSource.query('/root/info[1]/user/name')
325
326
327
328 --聚合函数
329
330 select @dataSource.query('count(/root/info[./user[type="MG"]])')
331
332
333
334 --FLWOR语法:For、Let、Where、Order by、Return
335
336 select @dataSource.query('<result>{for $li in /root/info/user/name[1] return strin337
338
339
340 select @dataSource.query('<result>{for $li in /root/info,$lii in $li/user/name[1] 341
342
343
344 select @dataSource.query('<result>{for $li in /root/info/user order by $li/@uid de345
346
347
348 select @dataSource.query('<result>{for $li in /root/info/user order by local-name(349
350 5.2 Value()
351 --value()获取某一节点或其属性的值,然后将其赋值给nvarchar类型
352
353 select @dataSource.value('(/root/info/user[1]/name)[1]','nvarchar(20)')
354
355 5.3 Exist()
356 select @dataSource.exist('/root/info/user/name[text()[1]="笨笨"]')
357
358
359
360 --将日期类型的节点属性转换为日期类型再与对应的值进行比较
361
362 declare @date xml
363
364 set @date='<root date="2013-10-07"/>'
365
366 --exist()
367
368 select @date.exist('/root[(@date cast as xs:date?) eq xs:date("2013-10-07")]') 369
370
371
372 --将日期类型的节点的值转换为日期类型再与对应的值进行比较,date[text()[1] cast xs:d373
374 declare @date1 xml
375
376 set @date1='<root><date>2013-10-07</date></root>'
377
378 select @date1.exist('/root/date[(text()[1] cast as xs:date?) eq xs:date("2013-10-0379
380
381
382 --取任意属性的值:sql:variable("@attriname")
383
384 declare @attr nvarchar(20)='uid'
385
386 if @dataSource.exist('/root/info/user/@*[local-name()=sql:variable("@attr")]')>=1 387
388 select 'OK'
389
390 else select @dataSource.query('/root/info/user/name[local-name()="笨笨"]') 391
392
393
394
395
396 5.4 Nodes()
397 --nodes()方法,将一个xquery表达式拆分成多行
398
399 select T.c.query('.') as result from @dataSource.nodes('/root/info') as T(c) 400
401 select T.c.query('.') as result from @dataSource.nodes('/root/info/user') as T(c)402
403 select T.c.value('(@uid)[1]','varchar(10)') as id,
404
405 T.c.value('(./name)[1]','nvarchar(20)') as name,
406
407 T.c.value('(./type)[1]','nvarchar(20)') as [type]
408
409 from @dataSource.nodes('/root/info/user') T(c)
410
411 --第一个value方法获取b节点下的值:cec,第二个value方法获取b节点下的值:c 412
413
414
415 declare @xml xml='<root><a><b>c<d>e</d>c</b></a></root>'
416
417 select @xml.value('(/root/a/b)[1]','nvarchar(20)'),@xml.value('(/root/a/b/text())[418
419
420
421 --组合使用
422
423 declare @xml xml ='<root><info id="001" name="Olive" type="MG"/></root>' 424
425 declare @pos int=2
426
427 select @xml.value('local-name((/root/info/@*[position()=sql:variable("@pos")])[1])
428
429
430
431 --sql:column:将普通数据列和Xml数据合并
432
433 declare @tb table (id int,data xml)
434
435 insert into @tb(id,data) select 1,'<root><info><name>Benben</name><type>MG</type><436
437 select id,data=data.query('<root><info><id>{sql:column("id")}</id>{/root/info/name438
439
440
441 ---contains:模糊查询contains(.,'XX')
442
443 select t.c.query('.') from @dataSource.nodes('/root/info/user[./name[contains(.,"笨444
445 5.5 Modify()
446 5.5.1 Insert
447 --在某一节点下添加一个子节点insert into,as first/as last 指定节点插入的位置 448
449 set @dataSource.modify('insert <sex>F</sex> as last into (/root/info/user)[1]') 450
451 select @dataSource
452
453
454
455 --添加某一节点的同级节点,before/after 添加同级节点
456
457 set @dataSource.modify('insert <UID>A1</UID> before (/root/info/user/name)[1]') 458
459 select @dataSource
460
461
462
463 --插入属性
464
465 declare @a int=111
466
467 set @dataSource.modify('insert (attribute a {sql:variable("@a")},
468
469 attribute b {".3"})
470
471 into (/root/info/user[@uid=001])[1]')
472
473 select @dataSource
474
475
476
477 5.5.2 Delete
478 --删除属性
479
480 set @dataSource.modify('delete /root/info/user/@uid')
481
482 select @dataSource
483
484
485
486 --删除节点
487
488 set @dataSource.modify('delete /root/info/user/type')
489
490 select @dataSource
491
492 --删除节点内容
493
494 set @dataSource.modify('delete /root/info/user/type/text()')
495
496 select @dataSource
497
498
499
500 --删除所有属性为空的节点
501
502 set @dataSource.modify('delete //*[empty(./*)]')
503
504 select @dataSource
505
506
507
508 5.5.3 Replace
509 --修改节点值
510
511 set @dataSource.modify('replace value of (/root/info/user/name/text())[1] with "小512
513 select @dataSource
514
515
516
517 --修改属性值
518
set @dataSource.modify('replace value of (/root/info/user/@uid)[1] with "0001"')
select @dataSource