.. _nilled: ====== 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). .. list-table:: :widths: 40 60 :header-rows: 1 * - **Parâmetros** - **Descrição** * - arg:node() - o nó a testar Exemplos ~~~~~~~~ Os exemplos abaixo usam este documento de entrada: .. code-block:: xml 12 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. .. list-table:: :widths: 50 50 :header-rows: 1 * - **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 ~~~~~~~~~~~ .. toctree:: :titlesonly: :glob: * :ref:`empty`. * :ref:`exists`.