以XML格式存储引用数据的可接受方式是什么?
例如,对于一个正确的节点?
如果(a),你对属性做了什么?如果(c),是否真的适合混合使用HTML& XML?同样,你如何处理单引号和引号?
答案 0 :(得分:28)
你的正确答案是A& C作为"
不是必须在元素数据中编码的字符。
您应始终使用XML编码字符,例如>
,<
和&
,以确保您不会遇到问题(如果它们不在CDATA部分内)。这些是关注元素数据的关键项目。
在讨论属性时,还要注意属性值中的'
和"
,具体取决于用于包围值的符号类型。
我发现经常编码"
和'
在所有方面都是一个更好的主意,因为它有时会转换为其他格式,"
或{{1也可能在那里引起问题。
答案 1 :(得分:14)
XML元素中的字符数据可以包含引号字符而不会转义它们。 XML元素中唯一不允许的字符是'&lt;','&amp;'和'&gt;' (并且只有“&gt;”字符属于“]]&gt;”字符序列的一部分时才会被禁止。
这并不是说逃避引号不是一个好主意 - 我只是说不转义引号是完全有效的XML。请参阅XML规范中的第2.4节“字符数据和标记”。
所以(a)和(c)都可以。
就属性而言,属性值可以用单引号或双引号括起来,所以如果它包含一个或另一个,你可以使用相反的值来包含值。如果它包含两者,那么你将不得不为一个或两个使用一个字符实体。
就'卷曲引号'而言,如果你在讨论Word有时会将引号转换为特殊的非ASCII引号 - 它们在XML中没有特殊含义,所以你可以做任何一个(但是它们)不能用来包含属性值“。你还需要确保文档的字符编码是正确的,这样才能正确解释它们。
答案 2 :(得分:5)
文本节点中的双引号可以表示为双引号字符或"
实体。如果值由单引号分隔,则属性值中的双引号可以表示为双引号字符,反之亦然;否则,将它们转义为"
只有在a)在非XML知识文本编辑器中编辑XML或b)通过字符串操作以编程方式创建XML时,这才有意义。一般来说,除非您确实知道自己在做什么,否则应该避免使用(a),或者至少在编辑完成后检查XML的格式是否正确。
你应该在所有情况下避免(b)。从不通过字符串操作创建XML;总是使用DOM或其他工具。
答案 3 :(得分:4)
您不应该担心XML中的事物编码方式。您应该始终使用适当的库来生成XML文档。对于XML来说,有太多的问题需要自己解决。我已经看到大量无效的XML文档出现了,因为有人认为他们可以自己生成适当的XML,而不使用库。目前使用的所有主要编程语言都有XML库。
答案 4 :(得分:4)
例如,对于一个正确的节点?
XML规范本身不讨论节点(除了将DTD语法与有限自动机正则表达式进行比较时)。 DOM节点可以是属性,元素,文本或任何其他节点类型。
在文本节点中,您只需要转义解析器将其解释为启动另一个节点的字符 - 因此您将&amp; 和&lt; 转义为&amp; amp; 和&amp; lt; 。
为了便于移植,转义卷引号通常是一个好主意,但没有理由在XML文本中转义普通引号。
在属性节点内,您必须像以前一样转义小于和和符号,以及用于分隔属性的引用。
<foo attribute="'ok'" attribute2='"also-ok"' attribute3=""needed""/>
通常更容易养成只使用一种类型并始终逃避它的习惯。我写了很多XSLT,并赞成使用“outside and”inside:
<xsl:value-of select="person[@name = 'bob']"/>
如果你因逃避而变得偏执,那么XPath的可读性就会降低:
<xsl:value-of select="person[@name = 'bob'"/>
如果(c),是否真的适合混合使用HTML&amp; XML?
XML定义命名实体 amp , gt , lt , ,&amp; QUOT
HTML定义了更多实体。
您可以而且应该使用XML中的XML命名实体,而不是使用数字实体。
lt 实体转义&lt; ,应该在文本和属性值中使用。 amp 实体转义&amp; ,应在文本和属性值中使用。 和“实体将转义'和”,并应在属性值中使用。 gt 实体有点无用 - 在XML中几乎不需要转义&gt; 的语法要求。也许&gt;只同意与&lt;如果它有相同的账单。
我在XSLT中经常使用的另一个生成源代码的是&amp; #xa; ,它会插入一个新行。 &amp; nl; 比&amp; gt;
更有用同样,你如何处理单引号和引号?
XML旨在标记Unicode文本,而卷曲引号在其中没有特殊含义。但是,使用的编码和XML文档在野外被误解的情况并不少见。因此,如果它处于封闭环境中并且可以保证生产者和消费者的正确Unicode编码,那么我只需将其放入XML中。否则使用数字字符实体。对于代码点大于127的任何字符都是如此 - 卷曲引号没有什么特别之处。
答案 5 :(得分:0)
正确的答案是'C'。
单引号并不会导致问题,但您需要注意&符号和左尖括号。
答案 6 :(得分:0)
这完全取决于。如果您想要做的只是在XML字符串中有引号,那么'A'。
但是如果有意义或者你需要抽象引用(例如i18n),那么XML提供了更丰富的选择。例如:
<name>
<given>Jesse</given>
<family>Ventura</family>
<nickName>the Body</nickName>
</name>
在许多情况下矫枉过正。但是如果你需要正确处理世界上许多不同的 - 经常是不一致的 - 命名方案,我会考虑按照这些方式对你的名字进行编码。 XML非常适用于此。