XSL选择元素前后的文本

时间:2013-12-07 06:46:31

标签: xml xslt

我在选择XSL中正确的文本部分时遇到问题。

所以我的XML看起来像这样:

<paragraph>Some text and then <emphasis>emphasized text</emphasis> and
normal text. </paragraph>

我需要输出类似于:

<p>Some text and then <em>emphasized text</em> and normal text.</p>

我无法找到一种方法来单独选择起始文本部分和结束文本部分,以便自己处理中间重点部分。这里的正确方法是什么?

好的,我找到了user3016153帮助的解决方案。我修改了他的建议:

<xsl:template match="paragraph">
    <p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match="emphasis">
    <em><xsl:value-of select="."/></em>
</xsl:template>

1 个答案:

答案 0 :(得分:2)

  

我无法找到一种方法来选择开头的文本部分和   单独结束文本部分以处理中间重点   部分靠自己。

你不需要这样做;你可以让样式表来处理它们:

<xsl:template match="paragraph">
    <p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match="emphasis">
    <em><xsl:apply-templates/></em>
</xsl:template>

EDIT
为了澄清一点,这个样式表:

<xsl:template match="*">
    <xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>

<xsl:template match="paragraph">
    <p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match="emphasis">
    <em><xsl:apply-templates/></em>
</xsl:template>

适用于:

<paragraph>Plain text and then <emphasis>emphasized text with a <span>special part</span> in it</emphasis> and plain text again.</paragraph>

将产生:

<p>Plain text and then <em>emphasized text with a <span>special part</span> in it</em> and plain text again.</p>

但是,如果您将最后一个模板更改为:

<xsl:template match="emphasis">
    <em><xsl:value-of select="."/></em>
</xsl:template>

你会得到:

<p>Plain text and then <em>emphasized text with a special part in it</em> and plain text again.</p>

此示例的要点是您不能孤立地考虑模板。