Здравствуйте.
Вопрос вроде не сложный, но что-то меня заклинило.
Есть XML:
<root>
<authors>
<author name="Dave Thomas"/>
<author name="Bill Smith"/>
<author name="Jack Herrington"/>
</authors>
<sellers>
<seller name="John Gain"/>
<seller name="Garry Garrison"/>
<seller name="Bill Smith"/>
</sellers>
</root>
В нем список авторов (authors/author) и продавцов (sellers/seller). Иногда автор является и продавцом (напр. Bill Smith). Авторы и продавцы находятся в разных секциях – authors и sellers.
Мне надо из обоих секций получить общий список имен, в котором имена не должны повторятся. Т.е. Bill Smith должен быть в списке в одном экземпляре.
Понимаю, что делать это надо с помощью preceding-sibling, но как её отфильтровать — не поиму.
<xsl:for-each select="root/*/*[not(@id=preceding-sibling::*/*/@id)]">
<xsl:value-of select="@id"/> <br/>
</xsl:for-each>
Здравствуйте, posdnyaa, Вы писали:
P>В нем список авторов (authors/author) и продавцов (sellers/seller). Иногда автор является и продавцом (напр. Bill Smith). Авторы и продавцы находятся в разных секциях – authors и sellers.
P>Мне надо из обоих секций получить общий список имен, в котором имена не должны повторятся. Т.е. Bill Smith должен быть в списке в одном экземпляре.
P>Понимаю, что делать это надо с помощью preceding-sibling, но как её отфильтровать — не поиму.
preceding-sibling — это с одной стороны — preceding (т.е. те, кто идет в документее ранее), а с другой — sibling (имеющие общего родителя). В твоем случае author "Bill Smith" является preceding-ом для seller-а "Bill Smith", но не является sibling-ом.
P>P><xsl:for-each select="root/*/*[not(@id=preceding-sibling::*/*/@id)]">
P> <xsl:value-of select="@id"/> <br/>
P></xsl:for-each>
P>
Используй ось preceding
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Здравствуйте, posdnyaa, Вы писали:
P>Здравствуйте.
P>Вопрос вроде не сложный, но что-то меня заклинило.
P>Есть XML:
P>P><root>
P> <authors>
P> <author name="Dave Thomas"/>
P> <author name="Bill Smith"/>
P> <author name="Jack Herrington"/>
P> </authors>
P> <sellers>
P> <seller name="John Gain"/>
P> <seller name="Garry Garrison"/>
P> <seller name="Bill Smith"/>
P> </sellers>
P></root>
P>
P>В нем список авторов (authors/author) и продавцов (sellers/seller). Иногда автор является и продавцом (напр. Bill Smith). Авторы и продавцы находятся в разных секциях – authors и sellers.
P>Мне надо из обоих секций получить общий список имен, в котором имена не должны повторятся. Т.е. Bill Smith должен быть в списке в одном экземпляре.
P>Понимаю, что делать это надо с помощью preceding-sibling, но как её отфильтровать — не поиму.
А не быстрее будет получить
P>P><root>
P> <name="Dave Thomas"/>
P> <name="Bill Smith"/>
P> <name="Jack Herrington"/>
P> <name="John Gain"/>
P> <name="Garry Garrison"/>
P> <name="Bill Smith"/>
P></root>
P>
И сделать Мюнха?
Здравствуйте, Kvazimodo75, Вы писали:
K>И сделать Мюнха?