【发布时间】:2018-08-25 10:28:45
【问题描述】:
我试图从以下示例 XML 中仅使用 XSLT 1.0 从两个不同的父节点中查找不同的值。我需要的是一个模板,它通过将整体作为参数传递给每个<one> 节点来调用。
<vln> 标识每个 <one> 节点
输入:
<?xml version="1.0" encoding="UTF-8"?>
<filename>
<root>
<vln>56837073</vln>
<one>
<vln>1233213427</vln>
<Maddress>
<address>
<state>ak</state>
</address>
</Maddress>
<Maddress>
<address>
<state>vr</state>
</address>
</Maddress>
<co>
<Maddress>
<address>
<state>fg</state>
</address>
</Maddress>
<Maddress>
<address>
<state>ak</state>
</address>
</Maddress>
</co>
</one>
<one>
<vln>6785475239</vln>
<Maddress>
<address>
<state>pp</state>
</address>
</Maddress>
<Maddress>
<address>
<state>fg</state>
</address>
</Maddress>
<co>
<Maddress>
<address>
<state>fg</state>
</address>
</Maddress>
<Maddress>
<address>
<state>ak</state>
</address>
</Maddress>
</co>
</one>
</root>
</filename>
输出: 1.ak、vr、fg
2.pp, fg, ak
3....继续取决于<one> 节点的数量
我按照各种教程尝试了所有我理解的方法。我所取得的成就是使用http://www.jenitennison.com/xslt/grouping/muenchian.html 找到单个父级的不同值,但是当结合起来我不知道。帮我解决这个问题。
我的代码:
<xsl:key name="product" match="one/Maddress/address/state/text()" use="." />
<xsl:template match="one">
<xsl:for-each select="one/Maddress/address/state/text()[generate-id() = generate-id(key('product',.)[1])]">
<xsl:value-of select="."/>
<text> </text>
</xsl:for-each>
<xsl:key name="product2" match="one/co/Maddress/address/state/text()" use="." />
<xsl:template match="two">
<xsl:for-each select="one/co/Maddress/address/state/text()[generate-id() = generate-id(key('product2',.)[1])]">
<xsl:value-of select="."/>
<text> </text>
</xsl:for-each>
这里调用一个和两个模板来检查来自两个不同父节点的不同值。 实现的输出:
1.ak、vr、fg、ak
2.pp, fg, fg, ak
【问题讨论】:
-
您能否编辑您的问题以显示您尝试过的内容?谢谢!
-
您的要求是文本格式吗?
-
@AmrendraKumar,不是文本格式 我正在检查纯 HTML 格式的不同值,只是将 XML 简单转换为 HTML
-
@TimC 这是我为从不同的父标签获取不同值所做的工作