以XML格式存储引用数据的公认方式是什么?
以XML格式存储引用数据的公认方式是什么?
例如,对于一个节点,哪个是正确的?
- (a)<name> Jesse" The Body" Ventura </ name>
- (b)<name> Jesse " The Body " Ventura </ name>
- (c)<name> Jesse" The Body" Ventura </ name>
- (d)以上都不是(请注明)
如果是(a),我们将如何处理属性?如果是(c),混合HTML和XML是否真的合适?同样,如何处理单引号和弯引号?
解决方案
正确答案是" C"。
单引号并没有真正引起问题,但是我们需要注意"&"号和左尖括号。
我们正确的答案是A&C,因为""不是必须在元素数据中编码的字符。
我们应该始终使用XML编码字符,例如>
,<
和&
,以确保如果它们不在CDATA节中,则不会出现问题。这些是元素数据要关注的关键项目。
在谈论属性时,还必须注意属性值内的'和
"`,具体取决于用于包围值的符号类型。
我发现经常编码'"和
'在各个方面都是一个更好的主意,因为在转换成其他格式时有时会有所帮助,在这种情况下,""
或者'
也可能会引起问题。
我们不必担心XML中的内容如何编码。我们应该始终使用适当的库来生成XML文档。 XML太多的陷阱让我们无法自行解决。我已经看到了成堆的无效XML文档,因为有人认为它们可以自己生成适当的XML,而无需使用库。当今使用的所有主要编程语言都具有XML库。
这真的取决于。如果我们只想在XML字符串中加引号,则为" A"。
但是,如果有含义或者我们需要抽象引号(例如i18n),则XML提供了更多的选择。例如:
<name> <given>Jesse</given> <family>Ventura</family> <nickName>the Body</nickName> </name>
在许多情况下过度杀伤。但是,如果我们需要正确处理世界上许多多样且经常不一致的命名方案,那么我会考虑按照这些思路对名字进行编码。 XML对此非常有用。
XML元素内的字符数据可以包含引号字符而无需转义。 XML元素内唯一不允许使用的字符是'<','&'和'>'(并且'>'字符仅在它属于"]]>"字符序列的一部分时才被禁止。
这并不是说转义引号不是一个好主意,我只是说不转义引号是完全有效的XML。请参见XML规范中的第2.4节"字符数据和标记"。
因此(a)和(c)都可以。
就属性而言,属性值可以用单引号或者双引号引起来,因此,如果属性值包含一个或者另一个,则可以使用相反的一个来将值括起来。如果要同时包含两者,则必须为其中之一或者两者使用字符实体。
就"弯引号"而言,如果我们谈论的是特殊的非ASCII引号,Word有时会将引号转换为在XML中没有特殊含义的引号,因此我们可以执行任何操作(但不能还需要确保文档的字符编码正确,以便正确解释它们。
文本节点中的双引号既可以表示为双引号字符,也可以表示为""`实体。如果属性值中的双引号用单引号引起来,则可以将其表示为双引号字符,反之亦然;否则,将其转义为""
仅在以下情况下才有意义:a)在不支持XML的文本编辑器中编辑XML,或者b)通过字符串操作以编程方式创建XML。一般来说,应该避免(a),除非我们真的知道自己在做什么,或者至少要有一种在编辑完成后检查XML格式正确的方法。
并且在所有情况下都应避免(b)。永远不要通过字符串操作来创建XML。始终使用DOM或者其他工具。
For example, for a node, which is correct?
XML规范本身不涉及节点(将DTD语法与有限自动机正则表达式进行比较时除外)。 DOM节点可以是属性,元素,文本或者任何其他节点类型。
在文本节点内,我们只需要转义解析器将其解释为开始另一个节点的字符,因此可以将&和<和<和&和<转义。
对于可移植性来说,转义大括号通常是个好主意,但没有理由在XML文本中转义纯引号。
在属性节点内,我们必须像以前那样转义小于和与号,以及用于分隔属性的引号。
<foo attribute="'ok'" attribute2='"also-ok"' attribute3=""needed""/>
养成只使用一种类型并始终转义的习惯通常会更容易。我编写了很多XSLT并喜欢使用" outside and"(内部和外部):
<xsl:value-of select="person[@name = 'bob']"/>
如果我们对转义感到偏执,那么XPath的可读性就会降低:
<xsl:value-of select="person[@name = 'bob'"/>
If (c), is it really appropriate to mix HTML & XML?
XML定义了命名实体amp,gt,lt,apos和quot
HTML定义了更多的实体。
我们可以并且应该优先使用XML中的XML命名实体,而不是使用数字实体。
lt实体转义<,应在文本和属性值中使用。
amp实体转义为&,应在文本和属性值中使用。
'和'实体转义为'和',应在属性值中使用。
gt实体有点用,几乎从来没有语法要求在XML中转义>。也许>仅同意与<一起使用,如果它的帐单相等。
我在XSLT中使用很多生成源代码的另一个是
插入新行。 &nl;本来会比>更多的用途
Similarly, how do you handle single and curly quotes?
XML被设计为标记Unicode文本,并且弯引号没有特殊含义。但是,经常会误解用于XML文档的编码和XML文档。因此,如果它处于封闭环境中,并且可以保证生产者和消费者使用正确的Unicode编码,那么我只需将其放入XML中即可。否则,请使用数字字符实体。对于任何代码点高于127的字符来说都是如此,弯引号没有什么特别的。