我需要編寫一個擴展的XSLT,它不會輸出(刪除)任何空的元素。對於屬性,這意味着如果路徑的值爲空,則不會在輸出中填充該屬性。對於節點,這意味着如果沒有任何數據(空屬性或沒有屬性/數據的子節點),它不會在輸出中填充該節點。下面是一個關於棒球的例子,以更好地解釋我在找什麼。XSL在轉換後刪除空元素
輸出如何看起來像現在:
<Baseball>
<Fields>
<Equipment>
<Bats>
<Bat Brand="Louisville" Model="16534" Length="34" Weight="30" Description="Composite" />
<Bat Brand="Easton" Model="asdfer" Length="32" Weight="29" Description="" />
<Bat Brand="" Model="" Length="" Weight="" Description="" />
</Bats>
<Gloves>
<Glove Brand="" Model="" Length="" Description="" />
</Gloves>
</Equipment>
</Fields>
</Baseball>
如何需要輸出的樣子:
<Baseball>
<Fields>
<Equipment>
<Bats>
<Bat Brand="Louisville" Model="16534" Length="34" Weight="30" Description="Composite" />
<Bat Brand="Easton" Model="asdfer" Length="32" Weight="29" />
</Bats>
</Equipment>
</Fields>
</Baseball>
我知道我可以通過寫檢查值解決這個問題,但考慮到如果可能的話,我想盡量避免這種情況。另外,給出我將繪製的XML的結構,給定輸出節點的屬性將具有彼此區分的路徑。例如,輸出節點「Bat」中的屬性「Brand」可能具有「ab/cd/ef/brand」的路徑,而屬性「Model」可能具有路徑「ab/wx/yz/model」。 (我知道我上面的棒球例子不利於這一點)。有沒有辦法做到這一點,而不寫兩個XSLT?您可以通過XSLT中的輸出回傳嗎?
沒辦法做了第二次與單一變換,但你可以寫你的XSLT來應付這個問題在一個整潔的方式...你有沒有輸入的例子XML,所以我們可以證明? – JohnLBevan 2014-10-01 00:46:38
@JohnLBevan「*沒有辦法做第二次通過一個單一的變換*」不知道你是什麼意思。你當然可以**在相同的轉換(樣式表)中進行多次傳遞。你會發現很多這樣的例子,這是我選擇的第一個例子:http://stackoverflow.com/questions/24205393/distinct-values-with-xslt-1-0-when-xpath-has-multiple-criteria/ 24216212#24216212 – 2014-10-01 05:08:40
@ michael.hor257k - 在顯示的示例中沒有多個文檔傳遞。數據被加載到一個被操作的變量中,但是沒有一些模板設置可以匹配由原始文檔上匹配的不同模板生成的元素。 – JohnLBevan 2014-10-01 10:40:47