nilled
Se um elemento é nilled (tem xsi:nil="true")
Descrição
A função fn:nilled diz se um elemento é nilled, no sentido do W3C XML Schema. Num schema, a declaração de um elemento pode marcá-lo como nillable. Isso permite que ele apareça vazio no documento, mesmo que o tipo dele exigisse algum conteúdo (texto, filhos ou os dois).
Um elemento não é considerado nilled só porque está vazio. Para ser nilled, ele precisa ter o atributo xsi:nil com valor true. Elementos nilled são sempre vazios: não é válido um elemento ter conteúdo e também xsi:nil igual a true.
Por outro lado, alguns elementos podem estar vazios de forma válida sem ser nilled. Isso acontece se o elemento tem um tipo complexo com todos os filhos opcionais, ou um tipo simples que aceita valor em branco, como xs:string. Para testar se um elemento está vazio (mas não necessariamente nilled), use a expressão string($node) = "".
Conferir um elemento nilled com fn:nilled evita resultados inesperados. Por exemplo, suponha que você quer subtrair o valor de um elemento discount do valor de um elemento price. Se discount for nilled, o valor tipado dele é a sequência vazia, e o resultado de price - discount também. Para evitar isso, use a expressão price - (if nilled(discount) then 0 else discount).
Parâmetros |
Descrição |
|---|---|
arg:node() |
o nó a testar |
Exemplos
Os exemplos abaixo usam este documento de entrada:
<xsl:variable name="in-xml" as="item()*">
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<child>12</child>
<child xsi:nil="true"></child>
<child></child>
<child/>
<child xsi:nil="false"></child>
</root>
</xsl:variable>
Estes exemplos supõem que o documento de entrada foi validado por um schema. Os geradores não validam contra um schema, então no Mapper Idea nilled() devolve false para todos os filhos abaixo.
XPath |
Resultado |
|---|---|
nilled($in-xml//child[1]) |
false |
nilled($in-xml//child[2]) |
true |
nilled($in-xml//child[3]) |
false |
nilled($in-xml//child[4]) |
false |
nilled($in-xml//child[5]) |
false |