xml结构中的歧义

时间:2012-06-27 10:09:21

标签: xml xml-parsing

我看到了这个XML:

<amount type="downpayment"></amount>

我想知道为什么不这样做:

<amount>
       <type>downpayment</type>
</amount>

1.是否有任何特殊原因或含义为什么它用方法1代替2?

2.如何将这两个XML转换为POJO?会有什么区别。

3. XML中任何不能使用的保留字?

2 个答案:

答案 0 :(得分:1)

在很多情况下,可以澄清具有用于对象属性的属性,以及包含对象的子元素。

一个例子是“文档样式”XML应用程序,例如XHTML。在:

<p class="warning"><a href="/helpAccountExpire">Your account has expired</a></p>

然后pa之间的关系是前者代表后者所属的文档元素,而class提供有关p性质的更多信息}和href关于a

这在非“文档样式”应用程序中也有意义:

 <list presorted="true">
   <item>4</item><item>7</item><item>23</item>
 </list>

这里list包含数字4,7和23,而presorted属性告诉使用列表已经排序(因此我们可以放弃自己排序的费用,如果我们需要它排序的话)。

在很多情况下,人们可以合理地使用它们,而个人偏好通常会对XML应用程序设计产生影响。当然,任何无法使用简单字符串或可能超出可能值的内容(在您的问题示例中,amount在第一个字符串中只能有0个或type个案件,但在第二个案件中可以有任何数字。

如何将其翻译成POJO取决于翻译的内容,您必须指定。

对于保留字,元素或属性的名称可以从匹配的任何字符开始:

":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

,名称的其余部分可以是与之匹配的任何字符,也可以是:

"-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

请注意,这包含一些Unicode非字符,虽然没有被XML标准禁止,但由于XML是基于Unicode构建的,因此不能使用XML,因此它们在实践中也被禁止。

还有一个规则,即任何大小写(xmlXML等)中以xMl开头的名称都保留用于核心XML技术,如XML本身,XML命名空间等。 。(xml:spacexml:langxmlnsxmlns:前缀是使用此示例的示例。)

(这是在XML1.0中,XML1.1略有不同的规则,澄清了一些奇怪的情况,但大多数情况下只需要真正需要这些澄清规则的人)。

使用XML命名空间的应用程序进一步限制了上述内容,因为名称中只能有一个冒号(:),在这种情况下,左侧的部分是标识所使用的命名空间的名称空间前缀(或默认命名空间(如果不存在)和右边的位(或者如果在默认的namespaec中的整个内容)是本地名称。通过暗示,这禁止用冒号开始一个名字。

即使你没有使用命名空间,最好遵循这些限制,这样你就可以与那些技术兼容。

答案 1 :(得分:0)

第一个是XML Attribute,第二个是XML Child Element。以下是一些谈论他们的比较的链接:

On w3schools.com

On IBM developerworks

On Stackoverflow