如何解决表示 null XML 元素的正确方法是什么??
xsi:nil 是表示值的正确方法:当发出 DOM 级别 2 调用 getElementValue() 时,返回 NULL 值。xsi:nil
也用于指示没有内容的有效元素,即使该元素的内容类型通常不允许空元素。
如果使用空标签,getElementValue() 将返回空字符串 (“”)
如果省略标签,则甚至不存在作者标签。这在语义上可能与将其设置为“nil”不同(例如,将“Series”设置为 nil
可能意味着该书不属于任何系列,而省略系列可能意味着该系列对于当前元素是不适用的元素。)
来自:W3C
XML Schema:Structures
引入了一种机制,用于表示一个元素在没有内容时应该被接受为“有效”,尽管内容类型不需要甚至不一定允许空内容。如果元素具有属性 xsi:nil 且值为
true,则它可能是没有内容的“有效”。如此标记的元素必须为空,但如果相应的复杂类型允许,则可以携带属性。
澄清:
如果您有一个 book xml 元素并且其中一个子元素是 book:series 您在填写它时有几个选项:
- 完全删除元素 - 当您希望表明该系列不适用于本书或该书不是系列的一部分时,可以这样做。在这种情况下,永远不会调用具有与 book:series 匹配的模板的 xsl 转换(或其他基于事件的处理器)。例如,如果您的 xsl 将 book 元素转换为表格行 (xhtml:tr),则使用此方法可能会得到不正确数量的表格单元格 (xhtml:td)。
- 将元素留空 - 这可能表明该系列是“”,或者是未知的,或者该书不是系列的一部分。任何与 book:series 匹配的 xsl 转换(或其他基于 evernt 的解析器)都会被调用。current() 的值将是“”。使用此方法,您将获得与下一个描述的相同数量的 xhtml:td 标记。
- 使用 xsi:nil=”true” - 这表示 book:series 元素为 NULL,而不仅仅是空的。将调用具有模板匹配 book:series 的 xsl 转换(或其他基于事件的解析器)。current() 的值将为空(不是空字符串)。此方法与 (2) 的主要区别在于 book:series 的模式类型不需要允许空字符串 (“”) 作为有效值。这对于系列元素没有实际意义,但对于在架构中定义为枚举类型的语言元素,xsi:nil=”true” 允许元素没有数据。另一个例子是十进制类型的元素。如果您希望它们为空,您可以合并一个仅允许 “” 和小数的枚举字符串,或使用可空的小数。
解决方法
我已经看到null
以多种方式表示的元素:
该元素存在于xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
该元素存在,但表示为一个空元素 (我认为这是错误的,因为“空”并且null
在语义上是不同的):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
返回的标记中根本不存在该元素 :
<book>
<title>Beowulf</title>
</book>
该元素有一个<null/>
子元素:
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
是否有正确或规范的方式来表示这样的null
值?除了上面的例子还有其他方法吗?
上面示例的 XML 是人为设计的,所以不要读得太深。:)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。