Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 使用XSL 1.0将字符串拆分为新元素_Xslt - Fatal编程技术网

Xslt 使用XSL 1.0将字符串拆分为新元素

Xslt 使用XSL 1.0将字符串拆分为新元素,xslt,Xslt,任何人都可以指导我基于令牌将给定的xml元素值拆分为多个子元素。这是我的示例输入xml和所需的输出。我使用XSL1.0有一个限制。多谢各位 输入XML: 在XSLT 2中,只需使用以下模板就很容易了: <xsl:template match="Encrypt|SENDER"> <xsl:copy> <xsl:analyze-string select="." regex="(\w+)=([\w/]+);?"> <xsl:match

任何人都可以指导我基于令牌将给定的xml元素值拆分为多个子元素。这是我的示例输入xml和所需的输出。我使用XSL1.0有一个限制。多谢各位

输入XML:

在XSLT 2中,只需使用以下模板就很容易了:

<xsl:template match="Encrypt|SENDER">
  <xsl:copy>
    <xsl:analyze-string select="." regex="(\w+)=([\w/]+);?">
      <xsl:matching-substring>
        <element name="{regex-group(1)}">
          <xsl:value-of select="regex-group(2)"/>
        </element>
      </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:copy>
</xsl:template>

首先,请检查您的XSLT1.0处理器是否不支持,如果不支持,您仍然可以使用基于XSLT1.0模板的实现。谢谢。我正在检查。如果您能为我指出一个具有上述功能的代码段,我将不胜感激。非常感谢您的解释。这是我的工作。再次感谢你。
<?xml version='1.0' encoding='UTF-8'?>
<SQLResults>
    <SQLResult>
        <ACTION1>Action1</ACTION1>
        <ACTION2>Action2</ACTION2>
        <Encrypt>
            <Program>GPG</Program>
            <Code>23FCS</Code>
        </Encrypt>
        <SENDER>
            <Program>Action4</Program>
            <Protocol>WS</Protocol>
            <Path>/home/Inbound</Path>
        </SENDER>
    </SQLResult>
</SQLResults>
<xsl:template match="Encrypt|SENDER">
  <xsl:copy>
    <xsl:analyze-string select="." regex="(\w+)=([\w/]+);?">
      <xsl:matching-substring>
        <element name="{regex-group(1)}">
          <xsl:value-of select="regex-group(2)"/>
        </element>
      </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:copy>
</xsl:template>
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:template match="Encrypt|SENDER">
    <xsl:copy>
      <xsl:variable name="tokens">
        <xsl:call-template name="tokenize">
          <xsl:with-param name="txt" select="."/>
          <xsl:with-param name="delim" select="';'"/>
        </xsl:call-template> 
      </xsl:variable>
      <xsl:for-each select="exsl:node-set($tokens)/token">
        <xsl:variable name="t1" select="substring-before(., '=')"/>
        <xsl:variable name="t2" select="substring-after(., '=')"/>
        <xsl:element name="{$t1}">
          <xsl:value-of select="$t2" />
        </xsl:element>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>

  <xsl:template name="tokenize">
    <xsl:param name="txt" />
    <xsl:param name="delim" select="' '" />
    <xsl:choose>
      <xsl:when test="$delim and contains($txt, $delim)">
        <token>
          <xsl:value-of select="substring-before($txt, $delim)" />
        </token>
        <xsl:call-template name="tokenize">
          <xsl:with-param name="txt" select="substring-after($txt, $delim)" />
          <xsl:with-param name="delim" select="$delim" />
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="$txt">
        <token><xsl:value-of select="$txt" /></token>
      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  </xsl:template>
</xsl:transform>