Я использую xml-процессор Altova для командной строки в Windows для обработки xml-файла справки и руководства. Help & Manual - это помощь в разработке программного обеспечения.
Я извлекаю из него текстовое содержимое, используя следующий xslt. В частности, у меня есть проблема с последним правилом параграфа:
<?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, чтобы каждый извлеченный фрагмент получал новые строки правила в выходном тексте