关键字:
KingbaseES、XML类型、XML函数
1.XML类型
xml数据类型可以被用来存储XML数据。它比直接在一个text域中存储XML数据的优势在于, 它会检查输入值的结构是不是良好,并且有支持函数用于在其上执行类型安全的操作。使用这种数据类型要求在安装时用configure --with-libxml选项编译。 与其他类型类似,可以使用下面两种语法来输入XML类型的数据:
xml '<test>hello world</test>'
'<test>hello world</test>'::xml;
示例如下:
xml类型可以存储遵循XML标准定义的“documents”,以及“content”片段,它是通过引用XQuery 和 XPath 数据模型来定义的。 “content”片段可以有多个顶级元素或“character”节点,但“documents”只能有一个顶级元素。可以使用表达式xmlvalue IS DOCUMENT来评估一个特定的xml值是一个“documents”还是“content”片段。Xmloptions用来指定输入的数据是documents”还是“content”片段,KingbaseES默认情况下此值为“content”片段。所以输入的xml可以有多个顶级元素,但是如果把此参数值改为documents”,将不能输入多个顶级元素的内容。示例如下:
也可以通过xmlparse函数从字符数据中生成一个 xml 类型的值,xmlparse函数的语法为:XMLPARSE ( { DOCUMENT | CONTENT } value)。此函数的DOCUMENT和CONTENT表示XML数据的类型,示例如下:
此外,在 KingbaseES 中处理 XML 数据产生错误的可能性更小,并且在 XML 数据编码、客户端编码和服务器编码三者相同时效率更高。因为 XML 数据在内部是以 UTF-8 处理的,如果服务器编码也是 UTF-8 时,计算效率将会最高。
当服务器编码不是 UTF-8 时,某些 XML 相关的函数可能在非 ASCII 数据上完全无法工作。尤其在 xmltable() 和xpath() 上,这是一个已知的问题。
2.XML函数
有一组函数和类函数的表达式可以用来从SQL数据产生XML内容。它们特别适合于将查询结果格式化成XML文档以便于在客户端应用中处理。
2.1.xmlcomment
语法:xmlcomment(text) xmlcomment函数创建了一个包含XML 注释的特定文本内容的值。该文本不能包含“--”或者也不能以一个“-”结尾,这样结果的结构是一个合法的 XML 注释。如果参数为空,结果也为空。示例如下:
2.2.xmlconcat
语法:xmlconcat(xml[,…]) xmlconcat函数把XML值的列表拼接成XML”content”片段。忽略列表中的空值,只有当参数都为空时,结果才为空。
2.3.xmlelement
语法:xmlelement(name name [, xmlattributes(value [AS attname] [, ... ])] [,content, ...]) Xmlelement表达式使用给定名称、属性和内容产生一个 XML 元素。示例如下:
2.4.xmlforest
语法:xmlforest(content [AS name] [, ...]) xmlforest表达式使用给定名称和内容产生一个元素的 XML”森林”。示例如下:
![file](https://img-blog.csdnimg.cn/cd582725229c4ad08cd5f0d46c5157b3.png)
2.5.xmlpi
语法:xmlpi(name target [, content]) Xmlpi表达式创建一个XML处理指令。如果存在内容,内容不能包含字符序列“?>”。示例如下:
2.6.xmlroot
语法:xmlroot(xml, version text | no value [, standalone yes|no|no value]) xmlroot表达式修改一个 XML 值的根结点的属性。如果指定了version,它会替换根节点的version声明中的值;如果指定了一个standalone,它会替换根节点的standalone值。示例如下:
2.7.xmlagg
语法:xmlagg(xml) 和这里描述的其他函数不同,函数xmlagg是一个聚集函数。它将聚集函数调用的输入值串接起来,非常像xmlconcat所做的事情,除了串接是跨行发生的而不是在单一行的多个表达式上发生。示例如下:
3.总结
XML类型可以用于存储XML数据,使用字符串类型也可以存储XML数据,但是字符串类型不能保证存储的是合法的XML数据,通常需要应用程序来负责保证输入数据的正确性,这将增加应用开发的难度。而使用XML类型不存在这种问题,数据库会对输入数据进行检查,保证数据的合法性。 XML函数和类函数的表达式可以用来从SQL数据产生XML内容,特别适合于将查询结果格式化成XML文档以便于在客户端应用中处理。