假設我有一個這樣的 HTML 檔案:
<ol>
<li>item 1</li>
<li>item 2</li>
</ol>
<ul>
<li>item 3</li>
<li>item 4</li>
<li> </li>
</ul>
對于那些串列項,無論是有序串列還是無序串列,我都想將該 <li> 元素的文本包裝在 <p> 標記中。這樣處理后的 HTML 檔案將如下所示:
<ol>
<li><p>item 1</p></li>
<li><p>item 2</p></li>
</ol>
<ul>
<li><p>item 3</p></li>
<li><p>item 4</p></li>
<li> </li>
</ul>
這是我寫的.xsl檔案:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match='/'>
<xsl:apply-templates select='*' />
</xsl:template>
<xsl:template match='*'>
<xsl:copy-of select='.' />
</xsl:template>
<xsl:template match='li'>
<xsl:if test='normalize-space(.)'>
<xsl:element name='p'>
<xsl:value-of select='.' />
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
但是,這不起作用。誰能告訴我我哪里做錯了?謝謝。
uj5u.com熱心網友回復:
您有一個模板匹配li,但它從未被應用,因為處理其父元素的模板按原樣復制其所有內容。此外,您的第一個模板是多余的;在內置的模板規則會為你做的。
嘗試:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match='*'>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match='li[normalize-space()]'>
<xsl:copy>
<p>
<xsl:value-of select='.' />
</p>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
感謝@michael.hor257k。我已經解決了這個問題。有效的代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match='*'>
<xsl:copy select='.'>
<xsl:apply-templates select='*'/>
</xsl:copy>
</xsl:template>
<xsl:template match='li[normalize-space()]'>
<xsl:copy>
<p>
<xsl:value-of select='.' />
</p>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342355.html
上一篇:轉換xslt/xml單獨的影像
