您好,我下面的标签带有&分隔,我需要获取不同标签中的每个单独字段,以便稍后在数据库的单独字段中编写代码,任何人在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>
使用格式正确输入,例如:
XML
<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>
您可以使用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, '&')" />
<output>
<MeusPedidosID>
<xsl:value-of select="substring-before(substring-after($statusMsg, 'MeusPedidosID='), '&')"/>
</MeusPedidosID>
<MeusPedidosURL>
<xsl:value-of select="substring-before(substring-after($statusMsg, 'MeusPedidosURL='), '&')"/>
</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, '&')"/>
</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, '='), '&')" />
</xsl:element>
<!-- recursive call -->
<xsl:call-template name="split">
<xsl:with-param name="string" select="substring-after($string, '&')" />
</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>