Xml 拆分逗号值以分隔节点/元素XSLT
我有一个场景,在其中一个XML字段中,源应用程序发送一个逗号分隔的值(根据它们的限制),但我们的目标系统只接受字段中的一个值(不需要id排序)。有人能帮忙吗。提前谢谢 当前XMLXml 拆分逗号值以分隔节点/元素XSLT,xml,xslt,xslt-1.0,xslt-2.0,xslt-3.0,xmlstarlet,libxslt,exslt,Xml,Xslt,Xslt 1.0,Xslt 2.0,Xslt 3.0,Xmlstarlet,Libxslt,Exslt,我有一个场景,在其中一个XML字段中,源应用程序发送一个逗号分隔的值(根据它们的限制),但我们的目标系统只接受字段中的一个值(不需要id排序)。有人能帮忙吗。提前谢谢 当前XML <root> <order> <id>1</id> <value>RU</value> </order> <order> <id>2<
<root>
<order>
<id>1</id>
<value>RU</value>
</order>
<order>
<id>2</id>
<value>SA</value>
</order>
<order>
<id>3</id>
<value>MX,BR,US</value>
</order>
<order>
<id>4</id>
<value>IN,SL</value>
</order>
</root>
1.
茹
2.
沙特阿拉伯
3.
MX,BR,美国
4.
在,SL
预期输出:
<root>
<order>
<id>1</id>
<value>RU</value>
</order>
<order>
<id>2</id>
<value>SA</value>
</order>
<order>
<id>3</id>
<value>MX</value>
</order>
<order>
<id>4</id>
<value>IN</value>
</order>
<order>
<id>3</id>
<value>BR</value>
</order>
<order>
<id>3</id>
<value>US</value>
</order>
<order>
<id>4</id>
<value>SL</value>
</order>
</root>
1.
茹
2.
沙特阿拉伯
3.
MX
4.
在里面
3.
溴
3.
美国
4.
SL
您可以使用该功能,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="order[contains(value,',')]">
<xsl:variable name="currentOrder" select="."/>
<xsl:for-each select="tokenize(value,',')">
<order>
<id><xsl:value-of select="$currentOrder/id"/></id>
<value><xsl:value-of select="."/></value>
</order>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
查看此处的工作情况:您可以使用该功能,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="order[contains(value,',')]">
<xsl:variable name="currentOrder" select="."/>
<xsl:for-each select="tokenize(value,',')">
<order>
<id><xsl:value-of select="$currentOrder/id"/></id>
<value><xsl:value-of select="."/></value>
</order>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在这里查看它的工作情况:如果您在一个系统上,您可以说
xmlstarlet sel\
-t-m‘根’\
-e'{name()}'-n\
-我是“订单”\
--var nid='id'\
-m'str:tokenize(值,“”,“”)\
-e“订单”\
-c'$nid'\
-e'值'-v'.-b\
-b-n\
file.xml
在哪里
是-t
匹配xsl:template
/
映射到-m
xsl:for each
是-e
xsl:element
是-c
xsl:copy of
是-v
xsl:value of
结束当前容器(-b
-m
,…);只需要 如果出现任何模板选项(在-e
之后)-t
输出换行符-n
- 是EXSLT工作的一部分
- 缩进字符和行连续字符是可选的
- 你的
-眼睛会有片刻的放松
1RU
2SA
3MX
3BR
3US
4英寸
4SL
要列出生成的XSLT代码,请在-t
选项之前添加-C
:
如果您所使用的系统依赖并因此仅支持-您可以说
xmlstarlet sel\
-t-m‘根’\
-e'{name()}'-n\
-我是“订单”\
--var nid='id'\
-m'str:tokenize(值,“”,“”)\
-e“订单”\
-c'$nid'\
-e'值'-v'.-b\
-b-n\
file.xml
在哪里
是-t
匹配xsl:template
/
映射到-m
xsl:for each
是-e
xsl:element
是-c
xsl:copy of
是-v
xsl:value of
结束当前容器(-b
-m
,…);只需要 如果出现任何模板选项(在-e
之后)-t
输出换行符-n
- 是EXSLT工作的一部分
- 缩进字符和行连续字符是可选的
- 你的
-眼睛会有片刻的放松
1RU
2SA
3MX
3BR
3US
4英寸
4SL
要列出生成的XSLT代码,请在-t
选项之前添加-C
:
回答得好,我这边+1!回答得好,我这边+1!