我有以下xml
<root xmlns="">
<General>
<Data>
<Number>123456</Number>
<Date>2018-10-22</Data>
<LineRefer>0001</LineRefer>
<LineRefer>0002</LineRefer>
</Data>
<Data>
<Number>789456</Number>
<Date>2018-10-22</Data>
<LineRefer>0003</LineRefer>
<LineRefer>0004</LineRefer>
</Data>
</General>
<Services>
<Details>
<LineNumber>0001</LineNumber>
<Description>test description</Description>
</Details>
<Details>
<LineNumber>0002</LineNumber>
<Description>test description</Description>
</Details>
<Details>
<LineNumber>0003</LineNumber>
<Description>test description</Description>
</Details>
<Details>
<LineNumber>0004</LineNumber>
<Description>test description</Description>
</Details>
</root>
我希望我可以分组以获得这个结果
数字123456
0001测试说明
0002测试说明
号码789456
0003测试说明
0004测试说明
这是我的xml xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/">
<html>
<head>
<title>HTML Document Example</title>
</head>
<body>
<div class="page">
<xsl:for-each select="root" >
<xsl:for-each select="Services/Details" >
<ul>
<li><xsl:value-of select="LineNumber" /> | <xsl:value-of select="Description" /> </li>
</ul>
</xsl:for-each>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果
0001测试说明
0002测试说明
0003测试说明
0004测试说明
预先感谢
答案 0 :(得分:0)
首先要尝试选择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中处理默认名称空间的示例,但由于让我感到圣诞节风,请看一下http://xsltfiddle.liberty-development.net/nc4NzRw/1作为示例。