1

我有一个这样的xml:

<node>
    <par>
        Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
    <par>
</node>

我必须打印这样的html:

<p>
    <span>Lorem ipsum dolor</span>
    <span class="bolder">sit</span>
    <span>amet, consectetur adipiscing elit.</span>
</p>

我找不到通过中间bold标签截断文本并添加新标签的方法

4

3 回答 3

3

以下转换应用于您提供的输入时,会产生您请求的结果。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform 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="node">
        <xsl:apply-templates />
    </xsl:template>

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

    <xsl:template match="par/text()">
        <span><xsl:copy-of select="." /></span>
    </xsl:template>

    <xsl:template match="bold">
        <span class="bolder"><xsl:value-of select="." /></span>
    </xsl:template>
</xsl:transform>
于 2013-10-31T13:24:43.113 回答
2

以下 XSLT 样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
  <xsl:strip-space elements="*"/>

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

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

  <xsl:template match="text()">
    <span>
      <xsl:value-of select="normalize-space(.)"/>
    </span>
  </xsl:template>

  <xsl:template match="bold/text()">
    <span class="bolder">
      <xsl:value-of select="normalize-space(.)"/>
    </span>
  </xsl:template>

</xsl:stylesheet>

当应用于此输入 XML 时:

<node>
  <par>
    Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
  </par>
</node>

产生以下输出:

<p>
  <span>Lorem ipsum dolor</span>
  <span class="bolder">sit</span>
  <span>amet, consectetur adipiscing elit.</span>
</p>
于 2013-10-31T13:29:36.353 回答
1

text()您可以通过使用选择器并在内部元素的任一侧对其进行索引来实现您想要的。因此,'Lorem ipsum dolor'当在上下文中的选择器par将是text()[1]并且'amet, consectetur adipiscing elit.'将是text()[2]

于 2013-10-31T13:22:46.840 回答