Xml XSLT1.0每行重复检查

Xml XSLT1.0每行重复检查,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我的xml中有一个小问题。如果行项目下有更多的条款(行),则第1条和第2条可能有相同的文本。(重复检查只应在每一行上,而不是在行项目上)如果行上有重复项而不是在行项目上,则应在行上检查重复项。希望你能帮助我 我想您需要键中行中的OrderLineNum以及文本 <xsl:key name="line_text" match="LineText" use="concat(../OrderLineNum, '|', Text)"/> 然后比赛就变成了这样 <xsl:temp

我的xml中有一个小问题。如果行项目下有更多的条款(行),则第1条和第2条可能有相同的文本。(重复检查只应在每一行上,而不是在行项目上)如果行上有重复项而不是在行项目上,则应在行上检查重复项。希望你能帮助我


我想您需要键中
行中的
OrderLineNum
以及
文本

<xsl:key name="line_text" match="LineText" use="concat(../OrderLineNum, '|', Text)"/>

然后比赛就变成了这样

<xsl:template match="LineText[generate-id() != generate-id(key('line_text', concat(../OrderLineNum, '|', Text))[1])]" />

试试这个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" standalone="yes" indent="yes"/>
  <xsl:strip-space elements="*" />
  <xsl:key name="header_text" match="HeaderText" use="Text"/>
  <xsl:key name="line_text" match="LineText" use="concat(../OrderLineNum, '|', Text)"/>

  <!-- Identity-Template für die nicht explizit benannten Elemente -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="HeaderText[generate-id() != generate-id(key('header_text', Text)[1])]" />
  <xsl:template match="LineText[generate-id() != generate-id(key('line_text', concat(../OrderLineNum, '|', Text))[1])]" />

<!-- delete empty nodes -->
 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
</xsl:stylesheet>