空字符串是否是有效的XML?

6

“”是有效的XML吗? 可以将“”插入到Oracle XBlob列或来自MSSQL的XML列中吗?

4个回答

7

不。 规范 指出,符合格式要求的XML文档应满足以下条件:

document ::=  prolog  element  Misc*

where

element ::= EmptyElemTag
              | STag content ETag 

5

这不是一个XML文档 - 至少需要一个根元素,最多只能有一个。如果编码为UTF-8,版本为1.0(XML推荐的生产22),则XML声明是可选的。它是一个有效的XML 片段 - 可以是空文本节点或者是一个空范围。

您必须在上下文中定义“XML片段”的含义。


4

这不是有效的XML,但可以插入到SQL Server 2005的XML列中。显然,在SQL Server 2005中,您需要将双引号替换为单引号:

Insert Into MyTestTable(MyXmlColumn) Values('');

这个方法很好用 - 我刚测试了一下,插入成功了。

但是Oracle不允许空的XML。表达式XMLType('')会引发异常"ORA-19032: 预期XML标签,但没有内容"。


你觉得 MSSQL 2005 数据库的这种行为是不是很奇怪?想象一下,你在 .NET 中将数据从该列解析到 XElement…… - Ray Lu
@CodeMelt:这就是微软 - 他们的产品有很多奇怪的地方。如果你想让我列出所有微软产品的奇怪之处,我会在这里度过永恒。 - BenAlabaster

1

这不是有效的 XML。有效的 XML 需要一个带有编码类型和根节点的 XML 声明。无论 Oracle 或 SQL Server 是否接受它,你都可以自行检查。


MSSQL列可以为空字符串,甚至是不符合任何XML格式的自由文本。我不知道Oracle如何处理这个问题。这就是为什么我要问! - Ray Lu
XML声明实际上不是有效XML的严格要求。 - Joachim Sauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接