断行时的XSLT分割地址



我有一个XML,地址是这样的:

<ADDRESS>SHIPPING ADDRESS 1
SHIPPING ADDRESS 2
SHIPPING ADDRESS 3</ADDRESS>

,我需要把它转换成:

<ADDRESS1>SHIPPING ADDRESS 1</ADDRESS1>
<ADDRESS2>SHIPPING ADDRESS 2</ADDRESS2>

(忽略第三行)。

注意:我使用XSLT 1.0

如果您只想要前两行,您可以这样做:

<xsl:template match="ADDRESS">
    <ADDRESS1>
        <xsl:value-of select="substring-before(., '&#10;')" />
    </ADDRESS1>
    <ADDRESS2>
        <xsl:value-of select="substring-before(substring-after(., '&#10;'), '&#10;')" />    
    </ADDRESS2>
</xsl:template>

假设至少有三行。否则它会变得更复杂。例如,可以使用:

<xsl:template match="ADDRESS">
    <xsl:variable name="address" select="concat(., '&#10;&#10;')" />
    <ADDRESS1>
        <xsl:value-of select="substring-before($address, '&#10;')" />
    </ADDRESS1>
    <ADDRESS2>
        <xsl:value-of select="substring-before(substring-after($address, '&#10;'), '&#10;')" /> 
    </ADDRESS2>
</xsl:template>

创建两个地址行,无论源地址有多少行

这是另一个适用于任何行数的答案:

  <xsl:template match="ADDRESS">
    <xsl:call-template name="splitAddress">
      <xsl:with-param name="string" select="."/>
    </xsl:call-template>
  </xsl:template>
  <xsl:template name="splitAddress">
    <xsl:param name="string"/>
    <xsl:param name="AddrNo" select="1"/>
    <xsl:choose>

  <xsl:when test="$AddrNo = 2">
    <xsl:element name="ADDRESS{$AddrNo}">
      <xsl:value-of select="substring-before($string, '&#10;')"/>
    </xsl:element>
  </xsl:when>

      <xsl:when test="contains($string, '&#10;')">
        <xsl:element name="ADDRESS{$AddrNo}">
          <xsl:value-of select="substring-before($string, '&#10;')"/>
        </xsl:element>
        <xsl:call-template name="splitAddress">
          <xsl:with-param name="string" select="substring-after($string, '&#10;')"/>
          <xsl:with-param name="AddrNo" select="$AddrNo + 1"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:element name="ADDRESS{$AddrNo}">
          <xsl:value-of select="$string"/>
        </xsl:element>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

——编辑我错过了在第二个地址行之后停止的要求。我已经插入了上面的xsl:when来根据需要结束处理:这里的条件可以根据需要编辑。

相关内容

  • 没有找到相关文章

最新更新