如何正确表示空的XML元素?
如何正确表示空的XML元素?
我看到过多种表示null
元素的方式:
元素存在,但包含xsi:nil=\"true\"
属性:
元素存在,但表示为空元素(我认为这是错误的,因为“空”和null
在语义上是不同的):
返回的标记中根本没有这个元素:
元素有一个子元素(来自下面的TStamper):
是否有一种正确或规范的方法来表示这样的null
值?除了上面的示例外,还有其他方法吗?
上面的示例XML是人为的,所以不用过于深究。 🙂
admin 更改状态以发布 2023年5月21日
使用xsi:nil是表示一个值时的正确方式,使得:
当DOM Level 2调用getElementValue()时,返回NULL值。
即使元素内容类型通常不允许空元素,xsi:nil也用于指示没有内容的有效元素。
如果使用空标签,getElementValue()将返回空字符串(“”)
如果省略该标签,则没有作者标签存在。这与将其设置为“nil”可能在语义上不同(例如,将“系列”设置为nil可能意味着该书籍不属于任何系列,而省略系列可能意味着系列是当前元素不适用的元素。)
来自:W3C
XML Schema:Structures引介了一种机制,用于在元素没有内容的情况下,指示其被接受为·有效·,尽管其内容类型不要求或甚至不允许空内容。如果元素具有带有值为true的xsi:nil属性,则可以将该元素标记为·有效·,该元素必须为空,但如果相应的复杂类型允许,则可以携带属性。
一项澄清:
如果您有一个书籍XML元素,并且其中一个子元素是book:series,则在填写它时有几个选项:
- 完全删除该元素-这可以在您希望指示系列不适用于此书籍或该书籍不属于系列时完成。在这种情况下,具有匹配book:series的xsl转换(或其他基于事件的处理器)将从未被调用过。例如,如果您的xsl将book元素转换为表行(xhtml:tr),您可能会使用此方法获得不正确的表格单元格(xhtml:td)号码。
- 保留该元素为空-这可能表示系列为“”,或未知,或该书籍不属于系列。任何匹配book:series的xsl转换(或其他基于事件的解析器)都将被调用。 current()的值将是“”。使用此方法与下一种方法描述的方法获得相同数量的xhtml:td标记。
- 使用xsi:nil=“true”-这表示book:series元素为NULL,而不仅仅是空的。具有模板匹配book:series的xsl转换(或其他基于事件的解析器)将被调用。 current()的值将为空(而不是空字符串)。该方法与(2)的主要区别在于,book:series的模式类型不需要允许空字符串(“”)作为有效值。这对于系列元素来说没有真正意义,但对于在架构中定义为枚举类型的语言元素而言,xsi:nil=“true”允许元素没有数据。另一个示例是类型为decimal的元素。如果你想让它们为空,可以将枚举字符串并集只允许""和十进制,或者使用可为空的十进制数。