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

Veja também