请原谅我之前的类似帖子。希望我能从这些伟大的反馈中学习,但仍然在使用XPath进行一些努力。我再次对相似的帖子感到抱歉!
当前XML
<?xml version="1.0" encoding="utf-8" ?>
<data>
<table_1 dropdown1="Item1"></table_1>
<listitems key1="Item1" name="" key2="Id2"/>
<listitems key1="Item1" name="Item A" key2="Id2"/>
<listitems key1="Item1" name="Item B" key2="Id2"/>
<listitems key1="Item1" name="" key2="Id4"/>
<listitems key1="Item1" name="Item A" key2="Id4"/>
<listitems key1="Item1" name="Item B" key2="Id4"/>
<listitems key1="Item2" name="" key2="Id6"/>
<listitems key1="Item2" name="Item C" key2="Id6"/>
<listitems key1="Item2" name="Item D" key2="Id6"/>
</data>
当前XSL
<xsl:template match="/">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:for-each select="/data/listitems[@key1=/data/table_1/@dropdown1]">
<xsl:value-of select="@name"/>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="listitems">
<xsl:value-of select="concat(@name, ' ')" />
</xsl:template>
当前结果:
答案 0 :(得分:1)
假设您将具有相同<listitems>
属性的name
元素视为重复项,则可以使用XPath的preceding-sibling
轴来忽略任何重复的元素:
<xsl:for-each select="/data/listitems[@key1=/data/table_1/@dropdown1][not(@name = preceding-sibling::listitems/@name)]">
这意味着,您选择了所选的所有项目,并附加限制,即没有任何前面的<listitems>
兄弟元素,其name
属性与正在测试的元素具有相同的值。