这是我的 xml 示例。
let $test :=
<root>
<a z="">stuff</a>
<b z="12" y="">more stuff</b>
<c>stuff</c>
<d z = " " y="0" x ="lkj">stuff goes wild</d>
</root>
我想使用查询来删除空属性来得到这个:
<root>
<a>stuff</a>
<b z="12">more stuff</b>
<c>stuff</c>
<d y="0" x ="lkj">stuff goes wild</d>
</root>
我的查询已经做到了这一点,但我不能让它只删除空属性,而不是删除所有属性(如果元素内有任何空属性)。
declare function local:sanitize ($nodes as node()*) {
for $n in $nodes
return typeswitch($n)
case element() return
if ($n/@*[normalize-space()='']) then (element{node-name($n)} {($n/@*[.!=''], local:sanitize($n/node()))})
else (element {node-name($n)} {($n/@*, local:sanitize($n/node()))})
default return ($n)
};
该功能需要高性能,因此我希望使用 typeswitch。我觉得我很接近,但最后一步似乎躲过了我。IE。z = " " 不会被抓住。谢谢您的帮助。