Xml 将具有相似名称的标记转换为特定格式
我不熟悉xml xslt。 我需要使用xslt将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 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>