我得在這裏頗有些挑戰...通用XSLT轉換代碼
是否有可能有一個XSL代碼,將應用到XML的任何層次,將其改造成嵌套的HTML列表?
例XML:
<Base>
<Parent>
<Child />
<Child>
<ChildOne />
<ChildOne>
<ChildTwo />
<ChildTwo />
</ChildOne>
</Child>
</Parent>
<Parent>
<Child>
<ChildOne>
<ChildTwo>
<ChildThree>
<ChildFour />
</ChildThree>
<ChildThree/>
</ChildTwo>
</ChildOne>
<ChildOne/>
<ChildOne/>
</Child>
<Child/>
</Parent>
</Base>
期望的結果:
<ul>
<li>Parent1
<ul>
<li>Child</li>
<li>Child
<ul>
<li>ChildOne</li>
<li>ChildOne>
<ul>
<li>ChildTwo</li>
<li>ChildTwo</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Parent2
<ul>
<li>Child
<ul>
<li>ChildOne
<ul>
<li>ChildTwo
<ul>
<li>ChildThree
<ul>
<li>ChildFour</li>
</ul>
</li>
<li>ChildThree</li>
</ul>
</li>
</ul>
</li>
<li>ChildOne</li>
<li>ChildOne</li>
</ul>
</li>
<li>Child</li>
</ul>
</li>
</ul>
所以邏輯是,如果有其他元素的元件(上EL下(抑制EL)。 ) - 被壓制的el。通過<li>name of upper el.<ul>all suppressed el.</ul></li>
等獲得環繞聲。
我的觀點是,這個XSL代碼的作用不是通過元素或屬性的值或名稱,而是通過條件檢查,如果其他元素落在特定元素下。
F.E.,如果ChildThree
沒有ChildFour
下本身,它也只是<li>ChildThree>
,而不是
<li>ChildThree
<ul>
<li>ChildFour</li>
</ul>
</li>
希望我解釋說清楚了。 :)
P.S.這是如何在瀏覽器一看,或多或少(只給視覺表現,因爲我們人類喜歡看到的東西:P)
您的輸入XML在第一個「Parent」下有三個「Child」元素,而所需的輸出XML只有兩個帶有「Child」文本的「li」元素。這是否正確?如果是這樣,邏輯是什麼? (對於'ChildOne'元素也是同樣的問題。) –
@Ben - 抱歉,我的錯誤。我現在糾正了它。輸入和輸出必須具有相同數量的元素(如現在這樣)。 :) – Syspect