首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表示空XML元素的正确方法是什么?

表示空XML元素的正确方法是什么?
EN

Stack Overflow用户
提问于 2009-04-21 19:24:56
回答 7查看 239.1K关注 0票数 177

我看到null元素以几种方式表示:

元素存在于xsi:nil="true"**:** 中。

代码语言:javascript
复制
 <book>
     <title>Beowulf</title>
     <author xsi:nil="true"/>
 </book>

元素存在,但表示为空元素(我认为这是错误的,因为‘null’和‘null’在语义上不同):

代码语言:javascript
复制
 <book>
     <title>Beowulf</title>
     <author/>
 </book>

 <!-- or: -->
 <book>
     <title>Beowulf</title>
     <author></author>
 </book>

元素在返回的标记中根本不存在

代码语言:javascript
复制
 <book>
     <title>Beowulf</title>
 </book>

元素具有一个<null/> 子元素(来自下面的TStamper ):

代码语言:javascript
复制
 <book>
     <title>Beowulf</title>
     <author><null/></author>
 </book>

是否有一种正确或规范的方法来表示这样的null值?还有比上面的例子更多的方法吗?

上面示例的XML是人为设计的,所以不要读得太深。:)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-21 19:32:39

xsi:nil是表示值的正确方法,这样:当发出DOM级别2调用getElementValue()时,返回空值。xsi:nil也用于指示没有内容的有效元素,即使该元素内容类型通常不允许空元素。

如果使用空标记,则如果省略空字符串(""),getElementValue()将返回空字符串(“”),则甚至不存在author标记。这可能在语义上不同于将其设置为“0”(Ex )。将“系列”设置为“零”可能意味着这本书不属于任何系列,而省略系列可能意味着该系列对当前元素是不适用的元素。)

来自:The W3C

XML :Structure引入了一种机制,当元素没有内容时,它应该被接受为·有效值·,尽管内容类型不需要,甚至不一定允许空内容。如果一个元素的属性xsi:nil的值为true,则该元素可能是·有效值·不带内容。这样标记的元素必须为空,但如果相应的复杂类型允许,则可以携带属性。

澄清:

如果您有一个book xml元素,并且其中一个子元素是book:series,则在填写它时有几个选项:

  1. 完全删除元素--当您希望表明该系列不适用于这本书或该书不是系列的一部分时,可以这样做。在本例中,具有与book:series匹配的模板的xsl转换(或其他基于事件的处理器)将永远不会被调用。例如,如果您的xsl将book元素转换为表行(xhtml:tr),则可以使用此方法获得不正确的表单元格数(xhtml:td)。
  2. 将元素保留为空--这可能表示该系列是"",或者是未知的,或者书不是系列的一部分。与book:series匹配的任何xsl转换(或其他基于evernt的解析器)都将被调用。current()的值将为"“。您将使用此方法获得与下一种方法相同数量的xhtml:td标记。
  3. 使用xsi:nil="true“--这意味着book:series元素是空的,而不是空的。您的xsl转换(或其他基于事件的解析器)具有模板匹配书籍:series将被调用。current()的值将为空(而不是空字符串)。此方法与(2)之间的主要区别在于,book:series的模式类型不需要允许空字符串("")作为有效值。这对于串联元素没有真正的意义,但是对于模式中定义为枚举类型的语言元素,xsi:nil="true“允许元素没有数据。另一个例子是十进制类型的元素。如果您希望它们是空的,您可以合并一个只允许“和小数”的枚举字符串,或者使用一个小数点,它是nillable的。
票数 129
EN

Stack Overflow用户

发布于 2009-04-23 03:54:41

没有规范的答案,因为XML根本上没有空概念。但是,我假设您需要Xml/对象映射(因为对象图有空);因此,对您来说,答案是“不管您的工具使用什么”。如果你写处理,那就意味着你喜欢什么。对于使用XML的工具来说,xsi:nil是最好的选择。对于大多数映射器来说,省略匹配的元素/属性是实现它的方法。

票数 13
EN

Stack Overflow用户

发布于 2009-04-21 19:32:28

这取决于如何验证XML。如果使用XML验证,则表示null值的正确方法是使用xsi:nil属性。

[来源]

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/774192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档