1

我最近将我的几个 .xml 文件从 docbook 更改为 dita。转换顺利,但有一些不需要的伪影。我很难过的是 .dita 无法识别<para>来自 docbook 的标签,而是将其替换为 .dita <p>。您认为这很好,但这会导致 XML 在下一行显示项目和有序列表,即:

1
 项目一
2
 项目二

代替:

1 项 一项
2 项 2

那么我该如何改变这个:

<section>
<title>Cool Stuff</title>
<orderedlist>
  <listitem>
    <para>ItemOne</para>
  </listitem>

  <listitem>
    <para>ItemTwo</para>
  </listitem>
</orderedlist>

对此:

<section>
<title>Cool Stuff</title>
<orderedlist>
  <listitem>
    ItemOne
  </listitem>

  <listitem>
    ItemTwo
  </listitem>
</orderedlist>

对不起,我应该更清楚这个问题。我需要从文档中删除所有深度不同的标签,但始终遵循(本地)树 listitem/para 。我对此有点陌生,但是通过将其附加到我的 docbook2dita 转换中,我是否可能做错了。可以在那个地方吗?

4

3 回答 3

5

我会使用这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match ="listitem/para">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

注意:覆盖身份规则。listitem/para被绕过(这会保留混合内容)

于 2010-10-12T20:52:02.780 回答
3

您可以使用过滤掉<para>节点的 XSLT 处理 dita 文件:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <!-- copy elements and attributes -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- replace para nodes within an orderedlist with their content -->     
  <xsl:template match ="orderedlist/listitem/para">
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>
于 2010-10-12T20:43:14.317 回答
0

我遇到了类似的问题,但我使用的 QtDom 并不总是像 XSLT 2.x 规范那样 100% 工作。(我正在考虑在某个时候切换到 Apache 库......)

我想在具有相应类的 div 中更改我的代码中的等效“listitem”:

<xsl:for-each select="/orderedlist/lisitem">
  <div class="listitem">
    <xsl:apply-templates select="node()"/>
  </div>
</xsl:for-each>

这将删除列表项并将其替换为 <div class="listitem">

然后,在我的例子中,<para> 中的模板可以包含标签,所以我不能使用另外两个将所有内容转换为纯文本的示例。相反,我使用了:

<xsl:template match ="para">
  <xsl:copy-of select="node()"/>
</xsl:template>

这删除了“para”标签,但保持所有孩子原样。因此,段落可以包含格式,并在 XSLT 处理过程中保留。

于 2014-01-10T02:09:27.107 回答