Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 组合多个值的XSLT_Xml_Xslt - Fatal编程技术网

Xml 组合多个值的XSLT

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

我有一个结构如下的xml。将有多种不同类型的资产(电话号码和IP地址)


电话号码
数
+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

这是一个分组问题,请参阅以获取示例。这是一个分组问题,请参阅以获取示例。