使用分隔符 & 在 xslt 1.0 中拆分
split in xslt 1.0 with the delimiter &
你好,我在下面用 & 分隔了标签,我需要让不同标签中的每个单独字段稍后写入数据库中的单独字段,有人有 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>
如果你想提取所有编码在给定字符串中的字段,你可以使用:
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>
你好,我在下面用 & 分隔了标签,我需要让不同标签中的每个单独字段稍后写入数据库中的单独字段,有人有 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>
如果你想提取所有编码在给定字符串中的字段,你可以使用:
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>