Xml 使用嵌套在另一个键中的键时,输出唯一的XSLT属性值

Xml 使用嵌套在另一个键中的键时,输出唯一的XSLT属性值,xml,xslt,xslt-1.0,muenchian-grouping,Xml,Xslt,Xslt 1.0,Muenchian Grouping,我一直在处理一个通过XSLT1.0和XML组合构建的网页,遇到了一个问题,在使用嵌套在另一个XSL键中的()时,我一直在努力导出唯一的属性值 由于XML数据的敏感性,我使用书店的“经典W3C学校示例”准确地重构了我的问题 代码: XSL: XML: 哈利·波特与魔法石 问题: 第一部分 对于XML数据中的每个属性,我将使用第一个将每个可用的值(数字)与任何相应的值进行交叉引用 第二部分 如果找到匹配项,则会触发第二个,将作为搜索条件,并尝试最终匹配任何值 第三部分 如果进行了第二

我一直在处理一个通过XSLT1.0和XML组合构建的网页,遇到了一个问题,在使用嵌套在另一个XSL键中的(
)时,我一直在努力导出唯一的属性值

由于XML数据的敏感性,我使用书店的“经典W3C学校示例”准确地重构了我的问题

代码:

XSL:




XML:


哈利·波特与魔法石

问题:

第一部分

对于XML数据中的每个
属性,我将使用第一个
将每个可用的
值(数字)与任何相应的
值进行交叉引用

第二部分

如果找到匹配项,则会触发第二个
,将
作为搜索条件,并尝试最终匹配任何

第三部分

如果进行了第二次也是最后一次匹配,则输出
的值,提供英国的城市名称

不幸的是,我正在努力寻找一种方法来输出唯一的
值,城市通常会在每个
中重复两三次

实际产量:



哈利波特与魔法石

约克

伦敦

伦敦

格拉斯哥

约克



有龙纹身的女孩

伦敦

伦敦

约克

约克



爷爷的大逃亡

约克

伦敦

格拉斯哥



七起谋杀案简史

约克

约克

约克



领先

伦敦

伦敦

约克



火车上的女孩

约克

伦敦

伦敦

格拉斯哥



期望输出:



哈利波特与魔法石

约克

伦敦

格拉斯哥



有龙纹身的女孩

伦敦

约克



爷爷的大逃亡

约克

伦敦

格拉斯哥



七起谋杀案简史

约克



领先

伦敦

约克



火车上的女孩

约克

伦敦

格拉斯哥



那么我能做些什么来解决这个问题呢?它是否与我的
中的
前面的兄弟姐妹
前面的
有关,或者在
上使用某种形式的
生成id
的方法是否有效?我肯定这是三种解决方案之一,但我不确定是哪一种


任何帮助都将非常感谢。

我想你只是想

      <xsl:for-each select="key('location-by-id', key('prom-by-id', occurrences/promotions/promotionNum)/promotionLocation)">

          <p><xsl:value-of select="location"/></p>



      </xsl:for-each>

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="books.xsl" ?>
<bookstore>
  <book>
    <title>Harry Potter and the Philosopher's Stone</title>
    <author>J K. Rowling</author>
    <year>1997</year>
    <price>3.99</price>
    <publisher>Bloomsbury (UK)</publisher>
    <synopsis>
         Harry Potter and the Philosopher's Stone is the first novel in the Harry Potter series and J. K. Rowling's debut novel.

         The plot follows Harry Potter, a young wizard who discovers his magical heritage as he makes close friends and a few enemies in his first year at the Hogwarts School of Witchcraft and Wizardry.

         With the help of his friends, Harry faces an attempted comeback by the dark wizard Lord Voldemort, who killed Harry's parents, but failed to kill Harry when he was just a year old.
   </synopsis>
   <occurrences>
    <promotions>
      <promotionCode>1</promotionCode>
      <promotionNum>1</promotionNum>
      <promotionNum>2</promotionNum>
      <promotionNum>3</promotionNum>
      <promotionNum>4</promotionNum>
   </promotions>
   </occurrences>
 </book>
 <book>
    <title>The Girl with the Dragon Tattoo</title>
    <author>Stieg Larsson</author>
    <year>2005</year>
    <price>5.99</price>
    <publisher>Norstedts Förlag (SWE)</publisher>
    <synopsis>
         In Stockholm, Sweden, journalist Mikael Blomkvist, co-owner of Millennium magazine, has lost a libel case brought against him by businessman Hans-Erik Wennerström. Lisbeth Salander, a brilliant but troubled investigator and hacker, compiles an extensive background check on Blomkvist for business magnate Henrik Vanger, who has a special task for him. 

         In exchange for the promise of damning information about Wennerström, Blomkvist agrees to investigate the disappearance and assumed murder of Henrik's grandniece, Harriet, 40 years ago. 

         After moving to the Vanger family's compound, Blomkvist uncovers a notebook containing a list of names and numbers that no one has been able to decipher.
    </synopsis>
    <occurrences>
      <promotions>
         <promotionCode>3</promotionCode>
        <promotionNum>5</promotionNum>
        <promotionNum>6</promotionNum>
        <promotionNum>3</promotionNum>
        <promotionNum>2</promotionNum>
      </promotions>
    </occurrences>
  </book>
   <book>
    <title>Grandpa's Great Escape</title>
    <author>David Walliams</author>
    <year>2015</year>
    <price>5.00</price>
    <publisher>Harper Collins Children's Books</publisher>
    <synopsis>
         An exquisite portrait of the bond between a small boy and his beloved Grandpa – this book takes readers on an incredible journey with Spitfires over London and Great Escapes through the city in a high octane adventure full of comedy and heart. Illustrated by the award-winning Tony Ross.
    </synopsis>
    <occurrences>
    <promotions>
      <promotionCode>4</promotionCode>
      <promotionNum>1</promotionNum>
      <promotionNum>2</promotionNum>
      <promotionNum>4</promotionNum>
   </promotions>
 </occurrences>
  </book>
<book>
    <title>A Brief History of Seven Killings</title>
    <author>Marlon James</author>
    <year>2015</year>
    <price>6.29</price>
    <publisher>Oneworld Publications</publisher>
    <synopsis>
         From the acclaimed author of The Book of Night Women comes a dazzling display of masterful storytelling exploring this near-mythic event. Spanning three decades and crossing continents, A Brief History of Seven Killings chronicles the lives of a host of unforgettable characters – slum kids, one-night stands, drug lords, girlfriends, gunmen, journalists, and even the CIA. 

         Gripping and inventive, ambitious and mesmerising, A Brief History of Seven Killings is one of the most remarkable and extraordinary novels of the twenty-first century.
    </synopsis>
    <occurrences>
      <promotions>
         <promotionCode>5</promotionCode>
        <promotionNum>1</promotionNum>
        <promotionNum>5</promotionNum>
        <promotionNum>6</promotionNum>
      </promotions>
    </occurrences>
        <occurrences>
      <promotions>
         <promotionCode>5</promotionCode>
        <promotionNum>1</promotionNum>
        <promotionNum>5</promotionNum>
        <promotionNum>6</promotionNum>
      </promotions>
    </occurrences>
  </book>
  <book>
    <title>Leading</title>
    <author>Sir Alex Ferguson</author>
    <year>2015</year>
    <price>7.99</price>
    <publisher>Hodder and Stoughton</publisher>
    <synopsis>
         In this revelatory new book, Sir Alex Ferguson dissects his 38 record-breaking years of management - first in Scotland and then, of course, at Manchester United - to reveal the key tools he used to deliver sustained success on and off the field. From tactics to teamwork, from hiring to firing, from dealing with the boardroom to responding to failure, LEADING investigates the pivotal leadership decisions of an astonishing career.
    </synopsis>
    <occurrences>
      <promotions>
         <promotionCode>6</promotionCode>
        <promotionNum>2</promotionNum>
        <promotionNum>3</promotionNum>
        <promotionNum>6</promotionNum>
      </promotions>
    </occurrences>
  </book>
  <book>
    <title>The Girl on the Train</title>
    <author>Paula Hawkins</author>
    <year>2015</year>
    <price>6.99</price>
    <publisher>Doubleday</publisher>
    <synopsis>
         Rachel catches the same commuter train every morning. She knows it will wait at the same signal each time, overlooking a row of back gardens. She’s even started to feel like she knows the people who live in one of the houses. ‘Jess and Jason’, she calls them. Their life – as she sees it – is perfect. If only Rachel could be that happy.

        And then she sees something shocking. It’s only a minute until the train moves on, but it’s enough. 

        Now everything’s changed. Now Rachel has a chance to become a part of the lives she’s only watched from afar.

        Now they’ll see; she’s much more than just the girl on the train…
    </synopsis>
    <occurrences>
      <promotions>
         <promotionCode>7</promotionCode>
        <promotionNum>1</promotionNum>
        <promotionNum>2</promotionNum>
        <promotionNum>3</promotionNum>
        <promotionNum>4</promotionNum>
      </promotions>
    </occurrences>
  </book>

  <promotion>
    <promotionID>1</promotionID>
    <percentageOff>10</percentageOff>
    <promotionalMerchandise>No</promotionalMerchandise>
    <promotionStartDate>2015-10-14T00:00:00</promotionStartDate>
    <promotionEndDate>2015-10-19T00:00:00</promotionEndDate>
    <promotionLocation>1</promotionLocation>
  </promotion>
  <promotion>
    <promotionID>2</promotionID>
    <percentageOff>15</percentageOff>
    <promotionalMerchandise>No</promotionalMerchandise>
    <promotionStartDate>2015-10-11T00:00:00</promotionStartDate>
    <promotionEndDate>2015-10-16T00:00:00</promotionEndDate>
    <promotionLocation>2</promotionLocation>
  </promotion>
  <promotion>
    <promotionID>3</promotionID>
    <percentageOff>30</percentageOff>
    <promotionalMerchandise>Yes</promotionalMerchandise>
    <promotionStartDate>2015-09-02T00:00:00</promotionStartDate>
    <promotionEndDate>2015-09-07T00:00:00</promotionEndDate>
    <promotionLocation>2</promotionLocation>
  </promotion>
  <promotion>
    <promotionID>4</promotionID>
    <percentageOff>5</percentageOff>
    <promotionalMerchandise>Yes</promotionalMerchandise>
    <promotionStartDate>2015-11-22T00:00:00</promotionStartDate>
    <promotionEndDate>2015-11-27T00:00:00</promotionEndDate>
    <promotionLocation>3</promotionLocation>
  </promotion>
  <promotion>
    <promotionID>5</promotionID>
    <percentageOff>50</percentageOff>
    <promotionalMerchandise>No</promotionalMerchandise>
    <promotionStartDate>2015-08-13T00:00:00</promotionStartDate>
    <promotionEndDate>2015-08-18T00:00:00</promotionEndDate>
    <promotionLocation>1</promotionLocation>
  </promotion>
  <promotion>
    <promotionID>6</promotionID>
    <percentageOff>80</percentageOff>
    <promotionalMerchandise>No</promotionalMerchandise>
    <promotionStartDate>2015-07-01T00:00:00</promotionStartDate>
    <promotionEndDate>2015-07-05T00:00:00</promotionEndDate>
    <promotionLocation>1</promotionLocation>
  </promotion>

  <locations>
    <locationID>1</locationID>
    <location>York</location>
  </locations>
    <locations>
      <locationID>2</locationID>
    <location>London</location>
  </locations>
    <locations>
      <locationID>3</locationID>
    <location>Glasgow</location>
  </locations>
</bookstore>
<book>
   <p>
      <strong>Harry Potter and the Philosopher's Stone</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>London</p>
   <p>Glasgow</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>The Girl with the Dragon Tattoo</strong>
   </p>
   <p>London</p>
   <p>London</p>
   <p>York</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>Grandpa's Great Escape</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>Glasgow</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>A Brief History of Seven Killings</strong>
   </p>
   <p>York</p>
   <p>York</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>Leading</strong>
   </p>
   <p>London</p>
   <p>London</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>The Girl on the Train</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>London</p>
   <p>Glasgow</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>Harry Potter and the Philosopher's Stone</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>Glasgow</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>The Girl with the Dragon Tattoo</strong>
   </p>
   <p>London</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>Grandpa's Great Escape</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>Glasgow</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>A Brief History of Seven Killings</strong>
   </p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>Leading</strong>
   </p>
   <p>London</p>
   <p>York</p>
   <br/>
   <br/>
</book>
<book>
   <p>
      <strong>The Girl on the Train</strong>
   </p>
   <p>York</p>
   <p>London</p>
   <p>Glasgow</p>
   <br/>
   <br/>
</book>
      <xsl:for-each select="key('location-by-id', key('prom-by-id', occurrences/promotions/promotionNum)/promotionLocation)">

          <p><xsl:value-of select="location"/></p>



      </xsl:for-each>