Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 将具有相似名称的标记转换为特定格式_Xml_Xslt - Fatal编程技术网

Xml 将具有相似名称的标记转换为特定格式

Xml 将具有相似名称的标记转换为特定格式,xml,xslt,Xml,Xslt,我不熟悉xml xslt。 我需要使用xslt将xml转换为特定格式。 需要查找类似的标记名并将其转换为特定格式 我的意见: <?xml version="1.0" encoding="UTF-8"?> <tpso xmlns="packetware:teleprovision" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xsi:schemaLocation="tpso.xsd">

我不熟悉xml xslt。 我需要使用xslt将xml转换为特定格式。 需要查找类似的标记名并将其转换为特定格式 我的意见:

  <?xml version="1.0" encoding="UTF-8"?>
      <tpso xmlns="packetware:teleprovision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-  instance" xsi:schemaLocation="tpso.xsd">
     <rollback>true</rollback>
        <soid>000027041866009@ALL</soid>
     <purpose>CHANGE</purpose>
       <description>tpso for Element ALL Action CHANGE</description>
       <failureAction>4</failureAction>
      <executeOnDate>2013-10-07T11:22:21.000+00:00</executeOnDate>
           <priority>8</priority>
           <subscriberID>260060059948580</subscriberID>
          <subscriberDN>48727554404</subscriberDN>
         <parameters>
           <parameter>
            <name>MSISDN</name>
           <value>48727554404</value>
       </parameter>
        </parameters>
           <serviceActions>

       <serviceAction>
                  <name>usage_state</name>
                <reference/>
             <parameters>
                     <parameter>
                        <name>action</name>
                          <value>add</value>
                   </parameter>
                    <parameter>
                      <name>old</name>
                 <value/>
                   </parameter>
                     <parameter>
                       <name>new</name>
                        <value>0ghfgfg</value>
                    </parameter>
                 </parameters>
             </serviceAction>

     <serviceAction>
        <name>usage_state</name>
        <reference/>
        <parameters>
            <parameter>
                <name>action</name>
                <value>add</value>
            </parameter>
            <parameter>
                <name>old</name>
                <value/>
            </parameter>
            <parameter>
                <name>new</name>
                <value>1ghfgfg</value>
            </parameter>
        </parameters>
    </serviceAction>

     <serviceAction>
        <name>usage_state</name>
        <reference/>
        <parameters>
            <parameter>
                <name>action</name>
                <value>add</value>
            </parameter>
            <parameter>
                <name>old</name>
                <value/>
            </parameter>
            <parameter>
                <name>new</name>
                <value>2ghfgfg</value>
            </parameter>
        </parameters>
    </serviceAction>

     <serviceAction>
        <name>usage_state</name>
        <reference/>
        <parameters>
            <parameter>
                <name>action</name>
                <value>add</value>
            </parameter>
            <parameter>
                <name>old</name>
                <value/>
            </parameter>
            <parameter>
                <name>new</name>
                <value>3ghfgfg</value>
            </parameter>
        </parameters>
    </serviceAction>
     <serviceAction>
        <name>usage_state</name>
        <reference/>
        <parameters>
            <parameter>
                <name>action</name>
                <value>add</value>
            </parameter>
            <parameter>
                <name>old</name>
                <value/>
            </parameter>
            <parameter>
                <name>new</name>
                <value>4ghfgfg</value>
            </parameter>
        </parameters>
    </serviceAction>
    </serviceActions>

        </tpso>
    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
我不知道如何进行。任何帮助都将不胜感激

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
用于提取唯一标记值的XSLT 下面是我编写的xsl。现在你和我都需要加入。

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>

“:{”操作“:”添加“,”值“:”}
“”:{“操作”:“删除”,“值”:“”}
“:{”操作“:”定义“,”值“:”}
“”:{“操作”:“chg”,“newvalue”:“oldvalue”:“}
“:{”操作“:”定义“,”值“:”}

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
输出需要如下所示 “计费模式”:{“操作”:“del”,“值”:“2”} “块数据传输”:{“操作”:“定义”,“值”:“无”} “bsg”:{“操作”:“删除”,“值”:”}

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
输入 真的 000027041866009@ALL 改变 要素所有动作变更的tpso 4. 2013-10-07T11:22:21.000+00:00 8. 260060059948580 48727554404 MSISDN 48727554404 使用状态 行动 添加 古老的 新的 0GHFG 使用状态 行动 添加 古老的 新的 1ghfgfg 使用状态 行动 添加 古老的 新的 2ghfgfg 使用状态 行动 添加 古老的 新的 3GHFG 使用状态 行动 添加 古老的 新的 4ghfgfg 数据块传输 行动 def 古老的 没有一个 新的 没有一个 bsg 行动 德尔 古老的 新的 计费模型 行动 德尔 古老的 新的 2.
这是分组问题的一个示例。如果您使用的是XSLT1.0,那么您需要仔细阅读处理此类问题的最有效方法

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
我假设您是按名称对serviceAction元素进行分组,因此首先定义一个键,按名称查找serviceAction元素

    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>
 <xsl:key name="service" match="t:serviceAction" use="t:name" />

注意,在XSLT 2.0中,您可以使用Muenchian分组方法来简化事情。

问题并不清楚:您在输出中显示的值在输入中的确切位置?更新输出。在输出中,0,1,2,3,4是正常序列,操作和值类似于变量名。对于操作,我们需要获取标记值,对于值,我们需要获取相应的标记OK,那么这里的问题到底是什么?需要使用xsl将xml转换为上述格式。不知道该怎么做?到目前为止,你试过什么了吗?“这是一个分组问题的例子。”我在问题中没有看到任何提示。@Tim C谢谢。这就是我一直在寻找的东西,我的想法并不完全相同。我需要提取唯一的标签以及相似标签的分组。我在代码部分添加了xsl。我需要将我的角色与你的角色结合起来,处理独特的标签和类似的标签。你知道怎么用这些球吗
    <xsl:for-each select="/pw:tpso/pw:serviceActions/pw:serviceAction">
    <xsl:choose>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'add'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "add","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'del'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "del","value" : "         <xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'def'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "def","value" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>"}
     </xsl:when>
     <xsl:when test="pw:parameters/pw:parameter/pw:name[string()='action']/../pw:value = 'chg'">
      "<xsl:value-of select="pw:name"/>" : {"operation": "chg","newvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='new']/../pw:value"/>", "oldvalue" : "<xsl:value-of select="pw:parameters/pw:parameter/pw:name[string()='old']/../pw:value"/>" }
     </xsl:when>
    </xsl:choose>
</xsl:for-each>