Вы усложняете себе задачу, пытаясь сначала выбрать Services/Details
, так как вам придется беспокоиться о группировке.Однако данные уже «сгруппированы» в элементах General/Data
, поэтому вместо этого начните с их выбора.
Чтобы получить подробную информацию о соответствующем Services/Details
, сначала определите ключ ....
<xsl:key name="services" match="Services/Details" use="LineNumber" />
Затем, при расположении на Data
элементах, вы можете получить все соответствующие данные, например, так ...
<xsl:for-each select="key('services', LineRefer)">
Попробуйте это XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:key name="services" match="Services/Details" use="LineNumber" />
<xsl:template match="root">
<html>
<head>
<title>HTML Document Example</title>
</head>
<body>
<div class="page">
<xsl:for-each select="General/Data" >
<h1><xsl:value-of select="Number" /></h1>
<ul>
<xsl:for-each select="key('services', LineRefer)">
<li><xsl:value-of select="LineNumber" /> | <xsl:value-of select="Description" /> </li>
</xsl:for-each>
</ul>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
См. http://xsltfiddle.liberty -development.net / nc4NzRw , чтобы узнать об этом в действии.
Обратите внимание, ваш XML показывает xmlns=""
в элементе root
.Если в вашем фактическом XML это xmlns
не пусто, это означает, что все ваши элементы XML находятся в пространстве имен по умолчанию, и вышеуказанный XSLT не будет работать.
В этом случае вам следует изменить XSLT, чтобы он отвечал за пространство имен.Есть много примеров того, как обрабатывать пространство имен по умолчанию в XSLT 1.0 здесь, на StackOverflow, но, как я чувствую, Christmassy, взгляните на http://xsltfiddle.liberty -development.net / nc4NzRw / 1 для примера.