我见过null元素以几种方式表示:
元素与xsi:nil=“true”:
<;书籍>;
<;标题>;贝奥武夫</标题>;
<;作者xsi:nil=“true”/>;
</书籍>;
元素存在,但表示为空元素(我认为这是错误的,因为’empty’和null在语义上是不同的):
<;书籍>;
<;标题>;贝奥武夫</标题>;
<;作者/>;
</书籍>;
<;!--或:——>;
<;书籍>;
<;标题>;贝奥武夫</标题>;
<;作者></作者>;
</书籍>;
返回的标记中根本不存在元素:
<;书籍>;
<;标题>;贝奥武夫</标题>;
</书籍>;
元素有一个<;空/>子元素(来自下面的TStamper):
<;书籍>;
<;标题>;贝奥武夫</标题>;
<;作者>&书信电报;空/></作者>;
</书籍>;
是否有正确或规范的方法来表示这样的null值?除了上面的例子,还有其他的方法吗
上面示例中的XML是人为设计的,所以不要读得太多。:)
xsi:nil是表示如下值的正确方法:
当发出DOM级别2调用getElementValue()时,将返回NULL值。
xsi:nil还用于指示没有内容的有效元素,即使该元素的内容类型通常不允许空元素
如果使用空标记,则getElementValue()返回空字符串(“”)
如果省略标记,则甚至不存在作者标记。这在语义上可能不同于将其设置为“nil”(例如,将“Series”设置为nil可能是因为该书不属于任何系列,而省略系列可能意味着系列对当前元素不适用。)
来自:W3C
XML模式:结构引入了
一种机制,用于发出
元素应被视为有效·
当它没有内容时,尽管
不需要或不需要的内容类型
甚至必须允许空内容。
一个元素可以是有效的,没有
内容(如果具有该属性)
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的模式类型不需要允许空字符串(“”)作为有效值。这对于series元素没有实际意义,但是对于模式中定义为枚举类型的language元素,xsi:nil=“true”允许元素没有数据。另一个例子是decimal类型的元素。如果希望它们为空,可以将只允许“”和小数的枚举字符串合并,或者使用可为零的小数