代码之家  ›  专栏  ›  技术社区  ›  Tim

用xml存储引用数据的公认方法是什么?

  •  17
  • Tim  · 技术社区  · 17 年前

    用xml存储引用数据的公认方法是什么?

    例如,对于一个节点,哪个是正确的?

    • (a)<name>杰西“身体”文图拉<name>
    • (b)<名称>杰西“身体”文图拉</名称>
    • (c)<name>杰西"身体"文图拉<name>
    • (d)以上均无(请具体说明)

    如果(a),你如何处理属性?如果是(c),那么混合使用html&xml真的合适吗?同样,你如何处理单引号和卷曲引号?

    7 回复  |  直到 9 年前
        1
  •  28
  •   sampathsris Rihards Fridrihsons    9 年前

    您的正确答案是 " 不是必须在元素数据中编码的字符。

    您应该始终是XML编码字符,例如 > , < & 以确保不存在CData区域内的问题。这些是元素数据需要关注的关键项。

    在谈到属性时,你必须同时注意 ' 内部属性值取决于用于包围该值的符号类型。

    我发现经常编码 在所有方面都是一个更好的主意,因为它在转换为其他格式时有时会有所帮助,其中 可能也会造成问题。

        2
  •  14
  •   Michael Burr    17 年前

    XML元素中的字符数据可以包含引用字符而不必脱机。XML元素中唯一不允许的字符是“<”、“&”和“>”(只有在“]]>”字符序列中,“>”字符才被禁止。

    这并不是说转义引号不是一个好主意-我只是说不转义引号是完全有效的XML。请参阅XML规范中的第2.4节-“字符数据和标记”。

    所以(a)和(c)都可以。

    就属性而言,属性值可以用单引号或双引号括起来,因此如果包含一个或两个引号,则可以使用相反的值来包围该值。如果它同时包含这两个字符,则必须为其中一个或两个字符使用字符实体。

    至于“卷曲引语”,如果你说的是特殊的,非ASCII引语,这个词有时会把引号转换成它们在XML中没有特殊含义,所以你可以做任何一个(但是它们不能用来包围属性值)。您还需要确保文档的字符编码正确,以便正确解释它们。

        3
  •  5
  •   Robert Rossney    17 年前

    文本节点中的双引号既可以表示为双引号字符,也可以表示为双引号。 &quot; 实体。如果值由单引号分隔,则属性值中的双引号可以表示为双引号字符;反之亦然,则将它们作为 &“;

    只有当您是a)在不支持xml的文本编辑器中编辑xml,或者b)通过字符串操作以编程方式创建xml时,这才是相关的。一般来说,除非您真的知道自己在做什么,或者至少在编辑完成后有一种检查XML格式良好性的方法,否则应该避免(a)。

    在任何情况下你都应该避免(b)。永远不要通过字符串操作创建XML;始终使用DOM或其他工具。

        4
  •  4
  •   Kibbee    17 年前

    您不必担心XML中的内容是如何编码的。您应该始终使用适当的库来生成XML文档。有太多的XML问题需要自己解决。我已经看到大量无效的xml文档以我的方式出现,因为有人认为它们可以自己生成正确的xml,而无需使用库。目前使用的所有主要编程语言都有xml库。

        5
  •  4
  •   Pete Kirkham    17 年前

    例如,对于一个节点,哪个是正确的?

    XML规范本身不讨论节点(除了在比较DTD语法和有限自动机正则表达式时)。DOM节点可以是属性、元素、文本或任何其他节点类型。

    在文本节点中,您只需要转义语法分析器将解释为启动另一个节点的字符,所以您可以转义 & < 作为 &安培; &书信电报; .

    对于可移植性,通常最好是转义花引号,但没有理由转义XML文本中的纯引号。

    在属性节点中,必须像以前一样转义小于和与号,以及用于分隔属性的引号。

    <foo attribute="'ok'" attribute2='"also-ok"' attribute3="&quot;needed&quot;"/>
    

    通常情况下,养成只使用一种类型并总是逃避它的习惯比较容易。我写了很多xslt,喜欢使用“outside and'inside:

    <xsl:value-of select="person[@name = 'bob']"/>
    

    如果您对转义感到不安,xpath的可读性就会降低:

    <xsl:value-of select="person[@name = &apos;bob&apos;"/>
    

    如果是(c),那么混合使用html&xml真的合适吗?

    xml定义命名实体 安培 , 燃气轮机 , 书信电报 , 阿斯 和;

    html定义了更多的实体。

    您可以并且应该使用XML实体中的XML命名实体,而不是使用数字实体。

    这个 书信电报 实体转义 < 应该在文本和属性值中使用。 这个 安培 实体转义 & 应该在文本和属性值中使用。 这个 阿斯 实体转义 应该在属性值中使用。 这个 燃气轮机 实体是有点无用的-几乎没有语法要求来逃避 > 在XML中。可能>只同意与<合作,如果它得到平等的帐单。

    我在xslt中经常使用的另一个生成源代码的方法是 &Xa; 插入新行。 &NL; 会比 &GT;

    同样,你如何处理单引号和卷曲引号?

    XML是用来标记Unicode文本的,而卷曲的引号在其中没有特殊意义。然而,用于和XML文档的编码在野外被曲解的情况并不少见。因此,如果它处于一个封闭的环境中,并且能够保证生产者和消费者的正确的Unicode编码,那么我就把它放在XML中。否则使用数字字符实体。代码点在127以上的任何字符都是这样-卷曲引号没有什么特别的。

        6
  •  0
  •   Joel Coehoorn    17 年前

    正确答案是“C”。

    单引号并不会真的造成问题,但您需要小心与号和左尖括号。

        7
  •  0
  •   sblundy    17 年前

    这要看情况。如果您只想在XML字符串中使用引号,则使用“a”。

    但是如果有意义或者需要抽象引号(例如i18n),xml提供了更丰富的选项。例如:

    <name>
      <given>Jesse</given>
      <family>Ventura</family>
      <nickName>the Body</nickName>
    </name>
    

    在很多情况下都会杀戮过度。但是,如果你需要正确处理世界上许多不同的命名方案,而且常常是不一致的,我会考虑按照这些行对你的名字进行编码。XML对此很有用。