我想通过匹配@pagebreak创建一个元素。 @pagebreak出现在多个父级,如para,table等...
INPUT XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child1>
<para>This is first para.</para>
<para pagebreak="yes">This is second para.</para>
<para>This is first para.</para>
<table>
<tr>
<td>first table</td>
</tr>
</table>
</child1>
<child1>
<para>This is first para.</para>
<para>This is second para.</para>
<para>This is first para.</para>
<table pagebreak="yes">
<tr>
<td>second table</td>
</tr>
</table>
</child1>
</root>
当前输出:
<?xml version="1.0" encoding="UTF-8"?>
<article>
<section>
<p class="p_1">This is first para.</p>
<div>
<pagebreak type="yes"/>
</div>
<para>This is second para.</para>
<p class="p_3">This is first para.</p>
<table id="tab_1">
<tr>
<td>first table</td>
</tr>
</table>
</section>
<section>
<p class="p_1">This is first para.</p>
<p class="p_2">This is second para.</p>
<p class="p_3">This is first para.</p>
<div>
<pagebreak type="yes"/>
</div>
<table>
<tr>
<td>second table</td>
</tr>
</table>
</section>
</article>
期望的输出:
<?xml version="1.0" encoding="UTF-8"?>
<article>
<section>
<p class="p_1">This is first para.</p>
<div>
<pagebreak type="yes"/>
</div>
<p class="p_2">This is second para.</p>
<p class="p_3">This is first para.</p>
<table id="tab_1">
<tr>
<td>first table</td>
</tr>
</table>
</section>
<section>
<p class="p_1">This is first para.</p>
<p class="p_2">This is second para.</p>
<p class="p_3">This is first para.</p>
<div>
<pagebreak type="yes"/>
</div>
<table id="tab_2">
<tr>
<td>second table</td>
</tr>
</table>
</section>
</article>
{p <1}}的模板应与不使用element/@pagebrake
的模板相同。
注意:在输出中,您可以看到:
@pagebrake
未转换为
para模板规则。 <para>This is second para.</para>
中的元素表未转换为
表模板规则。我使用的XSLT:
<table>
答案 0 :(得分:1)
问题在于您的模板匹配*[@pagebreak]
。您应该执行xsl:apply-templates
而不是执行xsl:next-match
,以便继续匹配当前节点,而不是继续匹配其子节点。
<xsl:template match="*[@pagebreak]">
<div><pagebreak type="yes"/></div>
<xsl:next-match />
</xsl:template>
您还需要添加模板以停止输出@pagebreak
。
<xsl:template match="@pagebreak" />