我最近将几个.xml文件从docbook更改为dita。转换没问题,但有一些不需要的工件。我难以理解的是.dita不会从docbook中识别<para>
标记,而是用<p>
替换它。您认为没问题,但这会导致XML在下一行显示项目和有序列表,即:
1 item One 2 item Two
而不是:
1 item One 2 item Two
所以我该如何改变这个:
<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>
对不起,我应该更清楚这个问题。我需要从不同深度的doument中删除所有标签,但始终遵循(本地)树listitem / para。我对此有点新意,但是我可以通过将其添加到我的docbook2dita转换中来做错。可以在那个地方吗?
答案 0 :(得分: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
(这会保留混合内容)
答案 1 :(得分: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>
答案 2 :(得分:0)
我遇到了类似的问题,但我使用的是QtDom,它并不总是像XSLT 2.x规范那样100%工作。 (我想在某个时候切换到Apache库......)
我想在我的代码中使用相应的类更改等效的“listitem”:
<xsl:for-each select="/orderedlist/lisitem">
<div class="listitem">
<xsl:apply-templates select="node()"/>
</div>
</xsl:for-each>
这将删除listitem并将其替换为&lt; div class =“listitem”&gt;
然后,在我的情况下,你在&lt; para&gt;中所拥有的模板可以包含标签,因此我无法使用另外两个将所有内容转换为纯文本的示例。相反,我使用了它:
<xsl:template match ="para">
<xsl:copy-of select="node()"/>
</xsl:template>
删除了“para”标签,但保留所有孩子的原样。所以段落可以包括格式化,并在XSLT处理中保留。