Извлечь текст из тега "para" со встроенными детьми "para"? - PullRequest
0 голосов
/ 26 мая 2011

Я использую 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> ======&#xA;&#xA;</xsl:text>
  </xsl:template>
  <xsl:template match="para[@styleclass='Heading2']">
    <xsl:text>===== </xsl:text>
    <xsl:value-of select="." />
    <xsl:text> =====&#xA;&#xA;</xsl:text>
  </xsl:template>
  <xsl:template match="para">
    <xsl:value-of select="." />
    <xsl:text>&#xA;&#xA;</xsl:text>
  </xsl:template>
  <xsl:template match="toggle">
    <xsl:text>**</xsl:text>
    <xsl:apply-templates />
    <xsl:text>**&#xA;&#xA;</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&#xA;Wiki-Format: zim 0.4&#xA;&#xA;</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 &quot;zAdd2Exchange&quot; throughout this document.  If your Service Account name is different, substitute that value for &quot;zAdd2Exchange&quot; in all commands and examples.  If you have named your account according to the recommended &quot;zAdd2Exchange&quot;, 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, чтобы каждый извлеченный фрагмент получал новые строки правила в выходном тексте

1 Ответ

0 голосов
/ 26 мая 2011

Я думаю, что нашел ответ. Вместо значения value с последним правилом para вместо этого я использую apply-templates, и это, кажется, ловит их всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...