3

次のようなxmlファイルがあります。

<Messages>
   error message 1

   error message 2 
</Messages>

次のように出力したいと思います。

Error 1: 
error message 1

Error 2:
error message 2

私は xslt 1.0 を使用しています。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" omit-xml-declaration="yes"/>

<xsl:template match="Messages">
    <h3>Error 1:</h3>
    <xsl:value-of select="substring-before(./text(), '&#10;')"/>
    <h3>Error 2:</h3>
    <xsl:value-of select="substring-after(./text(), '&#10;')"/>
</xsl:template>
</xsl:stylesheet>

しかし、それは私に何も返しませんでした...誰かこれで私を助けてくれますか? ありがとう!

4

2 に答える 2

1

この再帰テンプレートを使用してこれを実現できます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" omit-xml-declaration="yes"/>

  <xsl:template match="Messages" name="outputError">
    <xsl:param name="index" select="1"/>
    <xsl:param name="source" select="text()"/>
    <xsl:variable name="thisLine" select="normalize-space(substring-before($source, '&#10;'))"/>
    <xsl:variable name="theRest" select="substring-after($source, '&#10;')"/>
    <xsl:choose>
      <xsl:when test="$thisLine">
        <h3>Error <xsl:value-of select="$index"/>:</h3>
        <span><xsl:value-of select="$thisLine"/></span>
        <xsl:call-template name="outputError">
          <xsl:with-param name="index" select="$index + 1"/>
          <xsl:with-param name="source" select="$theRest"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="$theRest">
        <xsl:call-template name="outputError">
          <xsl:with-param name="index" select="$index"/>
          <xsl:with-param name="source" select="$theRest"/>
        </xsl:call-template>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

実際のエラーを<span>空白から明確に分離するために要素でラップしました。もちろん、必要に応じて a<p>要素<div>を使用することも、要素をまったく使用しないこともできます。

于 2013-04-18T15:52:05.557 に答える