【发布时间】:2014-08-01 19:35:54
【问题描述】:
我对删除重复元素进行了更多研究。 大多数地方,他们使用具有定义元素名称的关键功能。 就我而言,我没有任何已定义的元素。 我已经尝试修改示例
输入 XML:
<Test>
<Req>
Test
<A name="Test">Inp1</A>
<B>Inp2</B>
<D>Inp3</D>
</Req>
<Resp>
<A name="Test222">Inp1</A>
<A>Out1</A>
<B>Inp1</B>
<B>Inp2</B>
<C>Inp3</C>
</Resp>
</Test>
XSL : (参考了很多例子我试过了。)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:key name="unique" match="/Test" use="*"/>
<xsl:template match="/">
<xsl:for-each select="key('unique',//*)">
<xsl:if test="generate-id() = generate-id(key('unique',.)[1])">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
预期输出:
<Test>
<Req>
Test
<A name="Test">Inp1</A>
<B>Inp2</B>
<D>Inp3</D>
</Req>
<Resp>
<A>Out1</A>
<B>Inp1</B> <!-- Inp1 is already available for <A>. Not for <B>. Should not remove this -->
<C>Inp3</C> <!-- Inp3 is already available for <D>. Not for <C>. Should not remove this -->
</Resp>
</Test>
我们有匹配元素的名称和值。 (我们必须为此忽略属性)。
仅在 XSLT 1.0 或 1.1 上需要解决方案
感谢您对此的帮助。谢谢:)
【问题讨论】:
-
你的key不应该匹配
/Test,而是Req和Resp的子元素,并且它需要使用元素名称和内容的串联。 -
我已将'\Test'改为\。仍然出现错误。你能帮我看看示例 XSL。
-
恐怕您的附加问题不清楚(也许您应该发布一个新问题?)。
-
不带 XSL 密钥的相同解决方案。
-
根据您的建议回滚