在xslt 1.0中用定界符&

问题描述 投票:0回答:1

您好,我下面的标签带有&分隔,我需要获取不同标签中的每个单独字段,以便稍后在数据库的单独字段中编写代码,任何人在xslt 1.0中有任何示例?

<StatusMsg>
transfer-encoding=chunked&Server=nginx%2F1.13.12&MeusPedidosURL=http%3A%2F%2Fintegracao.meuspedidos.com.br%2Fapi%2Fv1%2Fclientes4118343%2F&Connection=keep-alive&MEUSPEDIDOS_QTDE_TOTAL_REGISTROS=0&Vary=Authorization%2C+Cookie&MeusPedidosID=4118343&Date=Tue%2C+31+Dec+2019+22%3A16%3A46+GMT&Content-Type=text%2Fplain
</StatusMsg>

我需要的示例...

<MeusPedidosID>4118343</MeusPedidosID>
<MeusPedidosURL>http%3A%2F%2Fintegracao.meuspedidos.com.br%2Fapi%2Fv1%2Fclientes4118343%2F</MeusPedidosURL>
xslt split xslt-1.0
1个回答
0
投票

使用格式正确输入,例如:

XML

<StatusMsg>transfer-encoding=chunked&amp;Server=nginx%2F1.13.12&amp;MeusPedidosURL=http%3A%2F%2Fintegracao.meuspedidos.com.br%2Fapi%2Fv1%2Fclientes4118343%2F&amp;Connection=keep-alive&amp;MEUSPEDIDOS_QTDE_TOTAL_REGISTROS=0&amp;Vary=Authorization%2C+Cookie&amp;MeusPedidosID=4118343&amp;Date=Tue%2C+31+Dec+2019+22%3A16%3A46+GMT&amp;Content-Type=text%2Fplain</StatusMsg>

您可以使用substring-before()substring-after()函数来提取所需的值-例如,以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <xsl:variable name="statusMsg" select="concat(StatusMsg, '&amp;')" />
    <output>
        <MeusPedidosID>
            <xsl:value-of select="substring-before(substring-after($statusMsg, 'MeusPedidosID='), '&amp;')"/>
        </MeusPedidosID>
        <MeusPedidosURL>
            <xsl:value-of select="substring-before(substring-after($statusMsg, 'MeusPedidosURL='), '&amp;')"/>
        </MeusPedidosURL>
    </output>
</xsl:template>

</xsl:stylesheet>

将产生:

结果

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <MeusPedidosID>4118343</MeusPedidosID>
  <MeusPedidosURL>http%3A%2F%2Fintegracao.meuspedidos.com.br%2Fapi%2Fv1%2Fclientes4118343%2F</MeusPedidosURL>
</output>

如果要提取all以给定字符串编码的字段,则可以使用:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <output>
        <xsl:call-template name="split">
            <xsl:with-param name="string" select="concat(StatusMsg, '&amp;')"/>
        </xsl:call-template>
    </output>
</xsl:template>

<xsl:template name="split">
    <xsl:param name="string"/>
    <xsl:if test="contains($string, '=')">
        <xsl:element name="{substring-before($string, '=')}">
            <xsl:value-of select="substring-before(substring-after($string, '='), '&amp;')" />
        </xsl:element>
        <!-- recursive call -->
        <xsl:call-template name="split">
            <xsl:with-param name="string" select="substring-after($string, '&amp;')" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

获取:

结果

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <transfer-encoding>chunked</transfer-encoding>
  <Server>nginx%2F1.13.12</Server>
  <MeusPedidosURL>http%3A%2F%2Fintegracao.meuspedidos.com.br%2Fapi%2Fv1%2Fclientes4118343%2F</MeusPedidosURL>
  <Connection>keep-alive</Connection>
  <MEUSPEDIDOS_QTDE_TOTAL_REGISTROS>0</MEUSPEDIDOS_QTDE_TOTAL_REGISTROS>
  <Vary>Authorization%2C+Cookie</Vary>
  <MeusPedidosID>4118343</MeusPedidosID>
  <Date>Tue%2C+31+Dec+2019+22%3A16%3A46+GMT</Date>
  <Content-Type>text%2Fplain</Content-Type>
</output>
© www.soinside.com 2019 - 2024. All rights reserved.