Xslt 使用的xsl:copy时抑制默认属性
在使用Xslt 使用的xsl:copy时抑制默认属性,xslt,xslt-2.0,Xslt,Xslt 2.0,在使用xsl:copy of时,我不知道如何抑制xhtml输出文档中的默认属性shape=“rect” 示例XML: <div class="table"> <p class="table-caption"><span class="table-label">Table 7.2</span> Foo<a class="tabfn-ref" href="#s9781483390086.i825" id="s97814833900
xsl:copy of
时,我不知道如何抑制xhtml输出文档中的默认属性shape=“rect”
示例XML:
<div class="table">
<p class="table-caption"><span class="table-label">Table 7.2</span> Foo<a class="tabfn-ref"
href="#s9781483390086.i825" id="s9781483390086.i808" shape="rect"><sup>a</sup></a> in
Pricing</p>
<img alt="Table 11" class="table-image" src="10.4135_9781483390086-table11.jpg"/>
<table>
<tgroup cols="3">
<colspec align="left" colname="1" colnum="1"/>
<colspec align="left" colname="2" colnum="2"/>
<colspec align="left" colname="3" colnum="3"/>
<thead>
<row rowsep="1">
<entry align="left">
<p/>
</entry>
<entry align="left">
<p>N</p>
</entry>
<entry align="left">
<p>%</p>
</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<p>Foo<a class="tabfn-ref" href="#s9781483390086.i826"
id="s9781483390086.i809" shape="rect"><sup>b</sup></a></p>
<p>1–12</p>
<p>13–24</p>
<p>25–36</p>
<p>37–48</p>
<p>49–60</p>
<p>61–72</p>
<p>73–84</p>
<p>85–96</p>
<p>More than 96</p>
</entry>
</row>
<row>
<entry>
<p>Bar<a class="tabfn-ref" href="#s9781483390086.i827"
id="s9781483390086.i810" shape="rect"><sup>c</sup></a></p>
<p>1–20%</p>
<p>21–40%</p>
<p>41–60%</p>
<p>61–80%</p>
<p>More than 80%</p>
</entry>
</row>
</tbody>
</tgroup>
</table>
<div class="table-notes" id="s9781483390086.i825a">
<p class="table-note" id="s9781483390086.i825b"><span class="label-fn"><a class="tabfn-ref"
href="#s9781483390086.i808" id="s9781483390086.i825" shape="rect"
><sup>a</sup></a></span> Foo</p>
<p class="table-note" id="s9781483390086.i825c"><span class="label-fn"><a class="tabfn-ref"
href="#s9781483390086.i809" id="s9781483390086.i826" shape="rect"
><sup>b</sup></a></span> Bar</p>
<p class="table-note" id="s9781483390086.i825d"><span class="label-fn"><a class="tabfn-ref"
href="#s9781483390086.i810" id="s9781483390086.i827" shape="rect"
><sup>c</sup></a></span> Too</p>
</div>
这显然是行不通的
输出:
<div class="table">
<img alt="Table 11" class="table-image" src="10.4135_9781483390086-table11.jpg"/>
<table xmlns="http://www.w3.org/1999/xhtml" hidden="hidden">
<caption>
<p xmlns="" class="table-caption">
<span class="table-label">Table 7.2</span> Foo <a class="tabfn-ref"
href="#s9781483390086.i825" id="s9781483390086.i808" shape="rect">
<sup>a</sup>
</a> in Pricing </p>
</caption>
<tgroup xmlns="" cols="3">
<colspec align="left" colname="1" colnum="1"/>
<colspec align="left" colname="2" colnum="2"/>
<colspec align="left" colname="3" colnum="3"/>
<thead>
<row rowsep="1">
<entry align="left">
<p/>
</entry>
<entry align="left">
<p>N</p>
</entry>
<entry align="left">
<p>%</p>
</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<p>Foo <a class="tabfn-ref" href="#s9781483390086.i826" id="s9781483390086.i809">
<sup>b</sup>
</a>
</p>
<p>1–12</p>
<p>13–24</p>
<p>25–36</p>
<p>37–48</p>
<p>49–60</p>
<p>61–72</p>
<p>73–84</p>
<p>85–96</p>
<p>More than 96</p>
</entry>
</row>
<row>
<entry>
<p>Bar <a class="tabfn-ref" href="#s9781483390086.i827" id="s9781483390086.i810">
<sup>c</sup>
</a>
</p>
<p>1–20%</p>
<p>21–40%</p>
<p>41–60%</p>
<p>61–80%</p>
<p>More than 80%</p>
</entry>
</row>
</tbody>
</tgroup>
</table>
<div class="table-notes" id="s9781483390086.i825a">
<p class="table-note" id="s9781483390086.i825b">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i808" id="s9781483390086.i825">
<sup>a</sup>
</a>
</span> Foo </p>
<p class="table-note" id="s9781483390086.i825c">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i809" id="s9781483390086.i826">
<sup>b</sup>
</a>
</span> Bar </p>
<p class="table-note" id="s9781483390086.i825d">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i810" id="s9781483390086.i827">
<sup>c</sup>
</a>
</span> Too </p>
</div>
</div>
表7.2定价中的Foo
N
%
福
1-12
13-24
25-36
37-48
49-60
61-72
73-84
85-96
超过96
酒吧
1-20%
21-40%
41-60%
61-80%
超过80%
福
酒吧
太
在第一个a class=“tabfn ref”中,形状属性被保留(由于复制了)。我需要抑制此操作。在使用
xsl:copy of
时,您无法排除属性或节点。它执行所选节点的深度复制
由于您已经使用带有空模板的标识转换来抑制@shape
属性,并且已经有一个与//div[@class='table']//p[@class='table-caption']
匹配的空模板,最简单的方法是使用模式将
更改为
,并在该模式下定义模板以复制和应用模板
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xs xhtml" xmlns="http://www.w3.org/1999/xhtml"
version="2.0">
<xsl:output method="xhtml" indent="yes"/>
<!-- Suppress default shape attribute -->
<xsl:template match="*/@shape"/>
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template priority="1"
match="//div[@class='table']//p[@class='table-caption']"/>
<xsl:template match="//div[@class='table']//p[@class='table-caption']"
mode="caption">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table">
<table hidden="hidden">
<caption>
<xsl:apply-templates
select="preceding-sibling::p[@class='table-caption']
| *[not(preceding::a/@shape)]" mode="caption"/>
</caption>
<xsl:apply-templates/>
</table>
</xsl:template>
</xsl:stylesheet>
请发布有效代码(最好最小化到只需要必要的代码),这样我们就可以重现问题。一般来说,做深度复制-你不能挑拣拣。谢谢你,Mads,这正是我需要的。在这里,我很难找到使用apply模板的解决方案,因为我需要在XML中抑制表标题的输出。使用模式非常有效。再次感谢。
<div class="table">
<img alt="Table 11" class="table-image" src="10.4135_9781483390086-table11.jpg"/>
<table xmlns="http://www.w3.org/1999/xhtml" hidden="hidden">
<caption>
<p xmlns="" class="table-caption">
<span class="table-label">Table 7.2</span> Foo <a class="tabfn-ref"
href="#s9781483390086.i825" id="s9781483390086.i808" shape="rect">
<sup>a</sup>
</a> in Pricing </p>
</caption>
<tgroup xmlns="" cols="3">
<colspec align="left" colname="1" colnum="1"/>
<colspec align="left" colname="2" colnum="2"/>
<colspec align="left" colname="3" colnum="3"/>
<thead>
<row rowsep="1">
<entry align="left">
<p/>
</entry>
<entry align="left">
<p>N</p>
</entry>
<entry align="left">
<p>%</p>
</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<p>Foo <a class="tabfn-ref" href="#s9781483390086.i826" id="s9781483390086.i809">
<sup>b</sup>
</a>
</p>
<p>1–12</p>
<p>13–24</p>
<p>25–36</p>
<p>37–48</p>
<p>49–60</p>
<p>61–72</p>
<p>73–84</p>
<p>85–96</p>
<p>More than 96</p>
</entry>
</row>
<row>
<entry>
<p>Bar <a class="tabfn-ref" href="#s9781483390086.i827" id="s9781483390086.i810">
<sup>c</sup>
</a>
</p>
<p>1–20%</p>
<p>21–40%</p>
<p>41–60%</p>
<p>61–80%</p>
<p>More than 80%</p>
</entry>
</row>
</tbody>
</tgroup>
</table>
<div class="table-notes" id="s9781483390086.i825a">
<p class="table-note" id="s9781483390086.i825b">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i808" id="s9781483390086.i825">
<sup>a</sup>
</a>
</span> Foo </p>
<p class="table-note" id="s9781483390086.i825c">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i809" id="s9781483390086.i826">
<sup>b</sup>
</a>
</span> Bar </p>
<p class="table-note" id="s9781483390086.i825d">
<span class="label-fn">
<a class="tabfn-ref" href="#s9781483390086.i810" id="s9781483390086.i827">
<sup>c</sup>
</a>
</span> Too </p>
</div>
</div>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xs xhtml" xmlns="http://www.w3.org/1999/xhtml"
version="2.0">
<xsl:output method="xhtml" indent="yes"/>
<!-- Suppress default shape attribute -->
<xsl:template match="*/@shape"/>
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template priority="1"
match="//div[@class='table']//p[@class='table-caption']"/>
<xsl:template match="//div[@class='table']//p[@class='table-caption']"
mode="caption">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table">
<table hidden="hidden">
<caption>
<xsl:apply-templates
select="preceding-sibling::p[@class='table-caption']
| *[not(preceding::a/@shape)]" mode="caption"/>
</caption>
<xsl:apply-templates/>
</table>
</xsl:template>
</xsl:stylesheet>