Xml 组合多个值的XSLT
我有一个结构如下的xml。将有多种不同类型的资产(电话号码和IP地址)Xml 组合多个值的XSLT,xml,xslt,Xml,Xslt,我有一个结构如下的xml。将有多种不同类型的资产(电话号码和IP地址) 电话号码 数 +54123232 IP地址 IPv4 1.1.1.1 IPv6 2.2.2.2 电话号码 数 +123456789 我想写一个xslt将其转换为下面的结构。所有电话号码将合并为一个资产,其中包含所有电话号码 <Assets> <Asset> <Name>Phon
电话号码
数
+54123232
IP地址
IPv4
1.1.1.1
IPv6
2.2.2.2
电话号码
数
+123456789
我想写一个xslt将其转换为下面的结构。所有电话号码将合并为一个资产,其中包含所有电话号码
<Assets>
<Asset>
<Name>PhoneNumberBlock</Name>
<PhoneNumbers>
<PhoneNumber>+54123232</PhoneNumber>
<PhoneNumber>+123456789</PhoneNumber>
</PhoneNumbers>
<Asset>
<Asset>
<Name>IPBlock</Name>
<IPv4Address>1.1.1.1</IPv4Address>
<IPv6Address>2.2.2.2</IPv6Address>
<Asset>
</Assets>
电话号码锁
+54123232
+123456789
IPBlock
1.1.1.1
2.2.2.2
我只知道基本的xslt foreach/switch/choose/if和all。不熟悉如何使用模板。谁能帮我指一下正确的方向吗 似乎没有按
Asset/Name
进行分组的一般规则。
因此,您可以尝试以下直截了当的解决方案:
<xsl:template match="Assets" >
<Assets>
<Asset>
<Name>PhoneNumberBlock</Name>
<PhoneNumbers>
<xsl:apply-templates select="Asset[Name='PhoneNumber']/Params/*" />
</PhoneNumbers>
</Asset>
<Asset>
<Name>IPBlock</Name>
<xsl:apply-templates select="Asset[Name='IPAddress']/Params/*" />
</Asset>
</Assets>
</xsl:template>
<xsl:template match="Param[Name='number']" >
<PhoneNumber><xsl:value-of select="Value"/></PhoneNumber>
</xsl:template>
<xsl:template match="Param[Name='IPv4']" >
<IPv4Address><xsl:value-of select="Value"/></IPv4Address>
</xsl:template>
<xsl:template match="Param[Name='IPv6']" >
<IPv6Address><xsl:value-of select="Value"/></IPv6Address>
</xsl:template>
电话号码锁
IPBlock
似乎没有按资产/名称进行分组的一般规则。
因此,您可以尝试以下直截了当的解决方案:
<xsl:template match="Assets" >
<Assets>
<Asset>
<Name>PhoneNumberBlock</Name>
<PhoneNumbers>
<xsl:apply-templates select="Asset[Name='PhoneNumber']/Params/*" />
</PhoneNumbers>
</Asset>
<Asset>
<Name>IPBlock</Name>
<xsl:apply-templates select="Asset[Name='IPAddress']/Params/*" />
</Asset>
</Assets>
</xsl:template>
<xsl:template match="Param[Name='number']" >
<PhoneNumber><xsl:value-of select="Value"/></PhoneNumber>
</xsl:template>
<xsl:template match="Param[Name='IPv4']" >
<IPv4Address><xsl:value-of select="Value"/></IPv4Address>
</xsl:template>
<xsl:template match="Param[Name='IPv6']" >
<IPv6Address><xsl:value-of select="Value"/></IPv6Address>
</xsl:template>
电话号码锁
IPBlock
这是一个分组问题,请参阅以获取示例。这是一个分组问题,请参阅以获取示例。