唯一 xml 个节点
Unique xml node
我有一个简单的 xml 如下,我必须提取 p-node
的唯一行
<T1>
<S1>
<p1>0</p1>
<p2>0</p2>
<p3>0</p3>
<p4>0</p4>
<p5>0</p5>
<p6>0</p6>
</S1>
<S1>
<p1>0</p1>
<p2>0</p2>
<p3>0</p3>
<p4>0</p4>
<p5>0</p5>
<p6>0</p6>
</S1>
<S1>
<p6>0</p6>
<p7>0</p7>
<p8>0</p8>
<p9>0</p9>
<p10>0</p10>
</S1>
<S1>
<p6>0</p6>
<p7>0</p7>
<p8>0</p8>
<p9>0</p9>
<p10>0</p10>
</S1>
<S1>
<p11>0</p11>
<p12>0</p12>
<p13>0</p13>
<p14>0</p14>
<p15>0</p15>
<p16>0</p16>
</S1>
</T1>
我想要所有的唯一节点P。
我想要像
这样的输出
P1
P2
P3
P4
P5
P6
P7
P8
P9
p10
P11
P12
P13
P14
P15
P16
个节点在使用 xslt 的输出中。
提前致谢。
您的问题没有显示任何努力,也没有显示您可能已经尝试过的任何代码。不过,今天心情大方,用下面的样式表吧。
XSLT 样式表
正如 Michael 已经建议的那样,使用 Muenchian 分组来识别唯一节点。定义一个查找唯一元素名称的键,并将模板仅应用于这些节点。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<xsl:key name="elem-name" match="S1/*" use="name()"/>
<xsl:template match="/T1">
<xsl:apply-templates select="S1/*[generate-id() =
generate-id(key('elem-name', name())[1])]"/>
</xsl:template>
<xsl:template match="*[starts-with(name(),'p')]">
<xsl:value-of select="name()"/>
<xsl:if test="following::*[starts-with(name(),'p')]">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:transform>
如果 p
元素只是一个示例,您还可以为
定义模板匹配
<xsl:template match="S1/*">
文本输出
p1
p2
p3
p4
p5
p6
p7
p8
p9
p10
p11
p12
p13
p14
p15
p16
我有一个简单的 xml 如下,我必须提取 p-node
的唯一行<T1>
<S1>
<p1>0</p1>
<p2>0</p2>
<p3>0</p3>
<p4>0</p4>
<p5>0</p5>
<p6>0</p6>
</S1>
<S1>
<p1>0</p1>
<p2>0</p2>
<p3>0</p3>
<p4>0</p4>
<p5>0</p5>
<p6>0</p6>
</S1>
<S1>
<p6>0</p6>
<p7>0</p7>
<p8>0</p8>
<p9>0</p9>
<p10>0</p10>
</S1>
<S1>
<p6>0</p6>
<p7>0</p7>
<p8>0</p8>
<p9>0</p9>
<p10>0</p10>
</S1>
<S1>
<p11>0</p11>
<p12>0</p12>
<p13>0</p13>
<p14>0</p14>
<p15>0</p15>
<p16>0</p16>
</S1>
</T1>
我想要所有的唯一节点P。 我想要像
这样的输出P1
P2
P3
P4
P5
P6
P7
P8
P9
p10
P11
P12
P13
P14
P15
P16
个节点在使用 xslt 的输出中。 提前致谢。
您的问题没有显示任何努力,也没有显示您可能已经尝试过的任何代码。不过,今天心情大方,用下面的样式表吧。
XSLT 样式表
正如 Michael 已经建议的那样,使用 Muenchian 分组来识别唯一节点。定义一个查找唯一元素名称的键,并将模板仅应用于这些节点。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<xsl:key name="elem-name" match="S1/*" use="name()"/>
<xsl:template match="/T1">
<xsl:apply-templates select="S1/*[generate-id() =
generate-id(key('elem-name', name())[1])]"/>
</xsl:template>
<xsl:template match="*[starts-with(name(),'p')]">
<xsl:value-of select="name()"/>
<xsl:if test="following::*[starts-with(name(),'p')]">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:transform>
如果 p
元素只是一个示例,您还可以为
<xsl:template match="S1/*">
文本输出
p1
p2
p3
p4
p5
p6
p7
p8
p9
p10
p11
p12
p13
p14
p15
p16