【发布时间】:2017-07-06 17:19:02
【问题描述】:
我正在研究 XSLT,它具有使用 (MySegment/*[not(.=preceding::*)]). 忽略重复项的逻辑
输入:
<MySegment>
<Field1>ABCD</Field1>
<FIeld2>1</Field2>
</MySegment>
<MySegment>
<Field1>ABCD123</Field1>
<FIeld2>1</Field2>
</MySegment>
这里我们有两个不同的值,但是由于 ABCD123 也包含 ABCD,因此它被视为重复条目。谁能给点建议。
这是我的 XSLT 的样子:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/RecordsInp">
<xsl:for-each select="ParentSegment">
<xsl:for-each select="./MySegment/*[not(.=preceding::*)]">
<A>
<Field1><xsl:value-of select ="name(.)"/></Field1>
<Field2><xsl:value-of select="."/></Field2>
</A>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我的输入是:
<RecordsInp>
<ParentSegment>
<MySegment>
<Field1>ABC</Field1>
<Field2>A1</Field2>
</MySegment>
<MySegment>
<Field1>ABC</Field1>
<Field2>A1</Field2>
</MySegment>
<MySegment>
<Field1>ABCDEF</Field1>
<Field2>ABC</Field2>
</MySegment>
</ParentSegment>
</RecordsInp>
我得到的是:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<Field1>Field1</Field1>
<Field2>ABC</Field2>
</A><A>
<Field1>Field2</Field1>
<Field2>A1</Field2>
</A><A>
<Field1>Field1</Field1>
<Field2>ABCDEF</Field2>
</A>
请注意,我在最后一次出现时没有得到 Field2=ABC。由于 Field2 以前从未出现过 ABC,因此我需要以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<Field1>Field1</Field1>
<Field2>ABC</Field2>
</A><A>
<Field1>Field2</Field1>
<Field2>A1</Field2>
</A><A>
<Field1>Field1</Field1>
<Field2>ABCDEF</Field2>
</A>
<A>
<Field1>Field2</Field1>
<Field2>ABC</Field2>
</A>
【问题讨论】:
-
“因为 ABCD123 也包含 ABCD,所以它被视为重复项” - 不,不是您显示的 XPath。
-
能否请您告知如何更正此问题。我的目标是遍历该段的所有字段并将它们填充在标题中而没有任何重复
-
如果您没有清楚地解释您的代码应该做什么,并且至少提供一个展示错误行为的典型示例,我们无法就如何更正您的代码向您提供建议。连同示例输入以及预期和观察到的输出,我们称之为minimal reproducible example,这是我们希望您在寻求帮助修复代码的问题中提供的内容。
-
嗨,我在这里详细添加了我的问题。请看一下