是否可以帮助我使用XSLT映射将以下HTML转换为XML。
输入HTML:
Bar
预期的XML:
<html><head></head><body>Array
(
[Value] => 123
[Head] => 456
[Description] => Array
(
[1] => ABC
[2] => DEF
[3] => GHI
)
[Price] => Array
(
[1] => 123
[2] => 456
[3] => 789
)
[Quantity] => Array
(
[1] =>
[2] =>
[3] =>
)
)</body></html>
价值和头只出现一次。 而值,描述和数量的数组可能是多个。我需要在标签内对所有1s,2s等进行分组。 请帮忙。
答案 0 :(得分:2)
您可以在 XSLT 2.0 :
中使用以下代码<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//body"/>
</xsl:template>
<xsl:template match="body">
<xsl:variable name="temp">
<xsl:analyze-string select="text()" regex="\[(.+)\] => (.*)">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="matches(regex-group(1), '^[0-9]+$')">
<Array name="{regex-group(1)}"><xsl:value-of select="regex-group(2)"/></Array>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{regex-group(1)}"><xsl:value-of select="regex-group(2)"/></xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
<aa>
<xsl:copy-of select="$temp//Value"/>
<xsl:copy-of select="$temp//Head"/>
<xsl:for-each-group select="$temp//Array" group-by="@name">
<Lines>
<Description><xsl:value-of select="current-group()[1]"/></Description>
<Price><xsl:value-of select="current-group()[2]"/></Price>
<Quantity><xsl:value-of select="current-group()[3]"/></Quantity>
</Lines>
</xsl:for-each-group>
</aa>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<aa>
<Value>123</Value>
<Head>456</Head>
<Lines>
<Description>ABC</Description>
<Price>123</Price>
<Quantity/>
</Lines>
<Lines>
<Description>DEF</Description>
<Price>456</Price>
<Quantity/>
</Lines>
<Lines>
<Description>GHI</Description>
<Price>789</Price>
<Quantity/>
</Lines>
</aa>