如何解决从带有嵌入的“ para”子级的“ para”标签中提取文本?
| 我正在Windows上使用Altova的命令行xml处理器来处理“帮助和手动” xml文件。帮助和手册是帮助创作软件。 我正在使用以下xslt从中提取文本内容。具体来说,我对最终的para规则有疑问:<?xml version=\'1.0\'?>
<xsl:stylesheet version=\"1.0\"
xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">
<xsl:output method=\"text\" />
<xsl:strip-space elements=\"*\" />
<xsl:template match=\"para[@styleclass=\'Heading1\']\">
<xsl:text>====== </xsl:text>
<xsl:value-of select=\".\" />
<xsl:text> ======

</xsl:text>
</xsl:template>
<xsl:template match=\"para[@styleclass=\'Heading2\']\">
<xsl:text>===== </xsl:text>
<xsl:value-of select=\".\" />
<xsl:text> =====

</xsl:text>
</xsl:template>
<xsl:template match=\"para\">
<xsl:value-of select=\".\" />
<xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match=\"toggle\">
<xsl:text>**</xsl:text>
<xsl:apply-templates />
<xsl:text>**

</xsl:text>
</xsl:template>
<xsl:template match=\"title\" />
<xsl:template match=\"topic\">
<xsl:apply-templates select=\"body\" />
</xsl:template>
<xsl:template match=\"body\">
<xsl:text>Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4

</xsl:text>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
我从某些段落元素中提取文本时遇到了一个问题。以这个xml为例:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"../helpproject.xsl\" ?>
<topic template=\"Default\" lasteditedby=\"tlilley\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"../helpproject.xsd\">
<title translate=\"true\">New Installs</title>
<keywords>
<keyword translate=\"true\">Regional and Language Options</keyword>
</keywords>
<body>
<header>
<para styleclass=\"Heading1\"><text styleclass=\"Heading1\" translate=\"true\">New Installs</text></para>
</header>
<para styleclass=\"Normal\"><table rowcount=\"1\" colcount=\"2\" style=\"width:100%; cell-padding:6px; cell-spacing:0px; page-break-inside:auto; border-width:1px; border-spacing:0px; cell-border-width:0px; border-color:#000000; border-style:solid; background-color:#fffff0; head-row-background-color:none; alt-row-background-color:none;\">
<tr style=\"vertical-align:top\">
<td style=\"vertical-align:middle; width:96px; height:103px;\">
<para styleclass=\"Normal\" style=\"text-align:center;\"><image src=\"books.png\" scale=\"100.00%\" styleclass=\"Image Caption\"></image></para>
</td>
<td style=\"vertical-align:middle; width:1189px; height:103px;\">
<para styleclass=\"Callouts\"><text styleclass=\"Callouts\" style=\"font-weight:bold;\" translate=\"true\">Documentation Convention</text></para>
<para styleclass=\"Callouts\"><text styleclass=\"Callouts\" translate=\"true\">To make the examples concrete,we refer to the </text><var styleclass=\"Callouts\">Add2Exchange</var><text styleclass=\"Callouts\" translate=\"true\"> Service Account as "zAdd2Exchange" throughout this document. If your Service Account name is different,substitute that value for "zAdd2Exchange" in all commands and examples. If you have named your account according to the recommended "zAdd2Exchange",then you may cut and paste any given commands as is.</text></para>
</td>
</tr>
</table></para>
</body>
</topic>
当在该段落上运行xslt时,它会拉出文本,但会在顶部段落元素处拉出文本。转换应该在所有提取的段落中添加一对换行符,但是由于嵌入的<para>
元素是在父para
元素处提取的,因此没有机会在嵌入的<para>
元素上这样做。
请注意,我不在乎表格标签,我只想剥离它们。
有没有一种方法可以构造para规则,以便它可以正确提取para元素的直接拥有的文本以及任何子para的文本,从而每个提取的块都可以在其中获取规则的换行符输出文字?
解决方法
我想我已经找到了答案。我没有使用最后一条规则的价值,而是使用了apply-templates,似乎可以全部抓住它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。