Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 需要:xslt hack以消除输出中的重复项_Xml_Xslt_Foreach - Fatal编程技术网

Xml 需要:xslt hack以消除输出中的重复项

Xml 需要:xslt hack以消除输出中的重复项,xml,xslt,foreach,Xml,Xslt,Foreach,在下面的xml数据中,有几个项具有不同的ID。例如,项“apfel”有多个ID,而不是总是同一个ID <lieferungen> <artikel id="3526"> <name>apfel</name> <lieferant>Fa. Krause</lieferant> <preis stueckpreis="true">8.97</preis&g

在下面的xml数据中,有几个项具有不同的ID。例如,项“apfel”有多个ID,而不是总是同一个ID

<lieferungen>
    <artikel id="3526">
        <name>apfel</name>
        <lieferant>Fa. Krause</lieferant>
        <preis stueckpreis="true">8.97</preis>
    </artikel>
    <artikel id="7866">
        <name>Kirschen</name>
        <preis stueckpreis="false">10.45</preis>
        <lieferant>Fa. Helbig</lieferant>
    </artikel>
    <artikel id="3526">
        <preis stueckpreis="true">12.67</preis>
        <lieferant>Fa. Liebig</lieferant>
        <name>apfel</name>
    </artikel>
    <artikel id="7866">
        <preis stueckpreis="false">17.67</preis>
        <name>Kirschen</name>
        <lieferant>Fa. Krause</lieferant>
    </artikel>
    <artikel id="3627">
        <name>apfel</name>
        <lieferant>Fa. Mertes</lieferant>
        <preis stueckpreis="true">9.54</preis>
    </artikel>
    <artikel id="7866">
        <name>Kirschen</name>
        <lieferant>Fa. Hoeller</lieferant>
        <preis stueckpreis="false">16.45</preis>
    </artikel>
    <artikel id="7868">
        <preis>3.20</preis>
        <name>Kohl</name>
        <lieferant>Fa. Hoeller</lieferant>
    </artikel>
    <artikel id="7866">
        <name>Kirschen</name>
        <lieferant>Fa. Richard</lieferant>
        <preis stueckpreis="false">12.45</preis>
    </artikel>
    <artikel id="3245">
        <preis stueckpreis="false">15.67</preis>
        <name>Bananen</name>
        <lieferant>Fa. Hoeller</lieferant>
    </artikel>
    <artikel id="6745">
        <name>Kohl</name>
        <lieferant>Fa. Reinhardt</lieferant>
        <preis stueckpreis="false">3.10</preis>
    </artikel>
    <artikel id="7789">
        <name>Ananas</name>
        <preis stueckpreis="true">8.60</preis>
        <lieferant>Fa. Richard</lieferant>
    </artikel>
</lieferungen>
因此,输出包含的项目数正好是我想要的两倍。这是因为每个中尉(供应商)都以中尉1(供应商1)和中尉2(供应商2)的身份出现

负责复制的代码如下所示:

Inkonsistenzen


   Die Datei enthält folgende Inkonsistenzen:
   Inkonsistenz: Name1=apfel; Lieferant1=Fa. Krause; ID1=3526 ; Name2=apfel;    
   Lieferant2=Fa. Mertes; ID2=3627
   Inkonsistenz: Name1=apfel; Lieferant1=Fa. Liebig; ID1=3526 ; Name2=apfel; 
   Lieferant2=Fa. Mertes; ID2=3627
   Inkonsistenz: Name1=apfel; Lieferant1=Fa. Mertes; ID1=3627 ; Name2=apfel; 
   Lieferant2=Fa. Krause; ID2=3526
   Inkonsistenz: Name1=apfel; Lieferant1=Fa. Mertes; ID1=3627 ; Name2=apfel; 
   Lieferant2=Fa. Liebig; ID2=3526
   Inkonsistenz: Name1=Kohl; Lieferant1=Fa. Hoeller; ID1=7868 ; Name2=Kohl; 
   Lieferant2=Fa. Reinhardt; ID2=6745
   Inkonsistenz: Name1=Kohl; Lieferant1=Fa. Reinhardt; ID1=6745 ; Name2=Kohl; 
   Lieferant2=Fa. Hoeller; ID2=7868
         <xsl:for-each select="//artikel">
            <xsl:if test="name/text() = $this_name">
                <xsl:if test="not(@id = $this_id)">
                    <p>
                        <xsl:text>Inkonsistenz: Name1=</xsl:text>
                        <xsl:value-of select="$this_name"/>
                        <xsl:text>; Lieferant1=</xsl:text>
                        <xsl:value-of select="$this_prod"/>
                        <xsl:text>; ID1=</xsl:text>
                        <u>
                            <b>
                                <xsl:value-of select="$this_id"/>
                            </b>
                        </u>
                        <xsl:text> ; Name2=</xsl:text>
                        <xsl:value-of select="name/text()"/>
                        <xsl:text>; Lieferant2=</xsl:text>
                        <xsl:value-of select="lieferant/text()"/>
                        <xsl:text>; ID2=</xsl:text>
                        <u>
                            <b>
                                <xsl:value-of select="@id"/>
                            </b>
                        </u>
                    </p>
                </xsl:if>
            </xsl:if>
        </xsl:for-each>


Inkonsistenz:Name1=
; 中尉1=
; ID1=
; 姓名2=
; 中尉2=
; ID2=


我知道为什么当前代码会出现重复,但我不知道如何更改它以获得所需的输出。

最简单的解决方法是更改这一行

 <xsl:for-each select="//artikel">

最简单的解决方法是改变这一行

 <xsl:for-each select="//artikel">

这似乎是一个分组问题。如果您使用的是XSLT1.0,请在这里阅读如何最好地处理它:这似乎是一个分组问题。如果您使用的是XSLT1.0,请在此处阅读如何最好地处理它:感谢您提供的解决方案!!谢谢你的解决方案!!
 <xsl:for-each select="following-sibling::artikel">
<xsl:for-each select="following-sibling::artikel[name = $this_name][not(@id = $this_id)]">