1
我有一個來自最終系統的XML,它需要刪除所有具有empty or null
值的空元素或屬性。XQuery刪除元素 - 屬性
例
<Element>
<fn att=""></fn>
<fn att="1"></fn>
<fn></fn>
<fn att="">
<child>1</child>
</fn>
</Element>
這是使用XQuery查詢和刪除它們
declare function local:remove-empty-elements($nodes as node()*) as node()* {
for $node in $nodes
return
if ($node instance of element())
then if (
(normalize-space($node) = '')
and (not(normalize-space($node/@*)))
)
then()
else element { node-name($node)
}
{ $node/@*, local:remove-empty-elements($node/node())}
else if ($node instance of document-node())
then local:remove-empty-elements($node/node())
else $node
};
這是成功的刪除是單一的元素和標記點我的腳本給出。但是當我把多個屬性放在一個元素中時
<fn att1="Data" att2="1"></fn>
函數本身失敗。
任何想法如何實現這一目標?
謝謝你。
**更新**
按har07回答,如果我想改變的功能要移除的屬性具有空值,有沒有什麼建議?我試着用下面的邏輯,但仍然發送相同的結果。
declare function local:remove-empty-elements($nodes as node()*) as node()* {
for $node in $nodes
return
if ($node instance of element())
then if (
(normalize-space($node) = '')
and (not($node/@*[normalize-space(.)]))
)
then (
/* updated code here */
if(($node/@*[normalize-space(.)])= '') then()
else
$node/@*[normalize-space(.)]
)
else element { node-name($node)
}
{ $node/@*, local:remove-empty-elements($node/node())}
else if ($node instance of document-node())
then local:remove-empty-elements($node/node())
else $node
};
感謝您的回答。如果我想刪除屬性,如果該值爲空,是否有任何建議?請參閱上面的更新。 – randytan
@randytan參見上面的**更新**部分 – har07