0
<?xml version="1.0" encoding="utf-8"?>
<order>
<press_mow>
  <mow_section_id>1</mow_section_id>
    <mow_webs>
        <mow_web>
            <web_number>1</web_number>
        </mow_web>
    </mow_webs>
</press_mow>
<press_mow>
  <mow_section_id>1</mow_section_id>
    <mow_webs>
        <mow_web>
            <web_number>1</web_number>
        </mow_web>
    </mow_webs>
</press_mow>
<press_mow>
  <mow_section_id>2</mow_section_id>
    <mow_webs>
        <mow_web>
            <web_number>1</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
    </mow_webs>
</press_mow>
<press_mow>
  <mow_section_id>2</mow_section_id>
    <mow_webs>
        <mow_web>
            <web_number>1</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
    </mow_webs>
</press_mow>
<press_mow>
  <mow_section_id>2</mow_section_id>
    <mow_webs>
        <mow_web>
            <web_number>1</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
       <mow_web>
            <web_number>2</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
        <mow_web>
            <web_number>3</web_number>
        </mow_web>
    </mow_webs>
</press_mow>

</order>

尝试使用 menchian 分组创建唯一的 mow_webs/mow_web/web_number 列表,但是在每个 press_mow 中,我要么只得到 123 一次,要么每个 press_mow 中的所有数字都无法看到我做错了什么,非常感谢任何帮助。

期望的输出

1 = 1
1 = 1
2 = 1,2,3
2 = 1,2,3
2 = 1,2,3

花了几个小时查看此方法的所有解释,并且以前使用效果很好,但在这种情况下看不到我的错误是什么。尝试了以下两种不同的方法。只能使用 xml 1.0。如果我犯了错误,这是我第一次提前道歉。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:key name="webnoB" match="mow_web" use="web_number" />
<xsl:key name="webnoC" match="mow_webs" use="mow_web/web_number" />
<xsl:template match="order">

******在这里测试********

<xsl:for-each select="press_mow">
    SecIdA:<xsl:value-of select="mow_section_id"/>/
    <xsl:for-each select="mow_webs">
        <xsl:for-each select="mow_web[count(. | key('webnoB', web_number)           [1]) = 1]">
            WebNoA:<xsl:value-of select="web_number"/>
        </xsl:for-each>
    </xsl:for-each>
</xsl:for-each>
**************
<xsl:for-each select="press_mow[count(. | key('webnoC', web_number)[1]) = 1]">
    secidB:<xsl:value-of select="mow_section_id"/>/
    <xsl:for-each select="mow_webs">
        <xsl:for-each select="mow_web">
            WebNo.B:<xsl:value-of select="web_number"/>
        </xsl:for-each>
    </xsl:for-each>
</xsl:for-each>
******TESTING HERE********

</xsl:template>
4

1 回答 1

0

如果 - 看起来 - 您想web_number在每个 中列出不同的值press_mow,则必须press_mow在键定义和用法中包含一个标识符。

由于您的输入没有标识press_mow节点的唯一值,因此您需要为此使用该generate-id()函数。

考虑以下样式表:

XSLT 1.0

<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:key name="wn" match="mow_web" use="concat(web_number, '|', generate-id(ancestor::press_mow))" />

<xsl:template match="/order">
    <root>
        <xsl:for-each select="press_mow">
            <section id="{mow_section_id}">
                <xsl:for-each select="mow_webs/mow_web[count(. | key('wn', concat(web_number, '|', generate-id(ancestor::press_mow)))[1]) = 1]">
                    <number>
                        <xsl:value-of select="web_number"/>
                    </number>
                </xsl:for-each>
            </section>
        </xsl:for-each>
    </root>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <section id="1">
      <number>1</number>
   </section>
   <section id="1">
      <number>1</number>
   </section>
   <section id="2">
      <number>1</number>
      <number>2</number>
      <number>3</number>
   </section>
   <section id="2">
      <number>1</number>
      <number>2</number>
      <number>3</number>
   </section>
   <section id="2">
      <number>1</number>
      <number>2</number>
      <number>3</number>
   </section>
</root>
于 2017-01-18T17:23:22.417 回答