【发布时间】:2012-08-02 03:36:20
【问题描述】:
我收到以下 xml 和 xsl 文件的重复记录。我只想转换一组列表项。如果可能,尽量不要从 xsl 部分删除任何内容(只需添加即可)。
<?xml version="1.0" encoding="utf-8" ?>
<data>
<listitems name="Select..." CtrId="Id2"/>
<listitems name="Item A" CtrId="Id2"/>
<listitems name="Item B" CtrId="Id2"/>
<listitems name="Select..." CtrId="Id4"/>
<listitems name="Item A" CtrId="Id4"/>
<listitems name="Item B" CtrId="Id4"/>
<listitems name="Select..." CtrId="Id6"/>
<listitems name="Item C" CtrId="Id6"/>
<listitems name="Item D" CtrId="Id6"/>
</data>
<xsl:template match="data/listitems">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:value-of select="@name"/>
</body>
</html>
</xsl:template>
结果(不正确的行为;重复) 选择... 项目 A 项目 B 选择... 项目 A 项目 B
期望的行为(仅获得 1 组) 选择... 项目 A 项目 B
【问题讨论】:
-
我倾向于认为您的 XML 设计不佳。我不知道您是否可以控制它,但如果可以,我建议您将
<Ctr Id="Id2">元素作为<data>的子元素放入,并将<listitems name="Select...">放入其中,等等。通常任何属于一个组应该包含在代表该组的元素中。在这样的组上运行的任何 XSLT 都会容易得多。 -
有没有可以抓取第一组相同的CtrlId?
-
是的,这是一个很好的例子——这对于我建议的设计来说是微不足道的。