这是我的XML
<?xml version="1.0" encoding="utf-8"?> <Root> <Personal> <Admin> <Code>111</Code> </Admin> <Report> <DataSet> <History> <Claim no="1"> <Subject> <Name> <First>John</First> </Name> </Subject> </Claim> <Claim no="2"> <Subject> <Name> <First>John</First> </Name> </Subject> </Claim> </History> </DataSet> </Report> </Personal> <Personal> <Admin> <Code>222</Code> </Admin> <Report> <DataSet> <History> <Claim no="1"> <Subject> <Name> <First>Don</First> </Name> </Subject> </Claim> <Claim no="2"> <Subject> <Name> <First>Don</First> </Name> </Subject> </Claim> </History> </DataSet> </Report> </Personal> </Root>
这里“个人”部分会重复多次[动态]。
我希望数据为
John Don
单击John数据必须展开为
John Admin Report Claim: 1 Name: John Claim: 2 Name:John Don
我为此创建了XSLT,如下所示:
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" /> <xsl:key name="keyName" match="Personal" use="Report/Dataset/History/Claim/Subject/Name/First" /> <xsl:template match="Root"> <ul> <xsl:for-each select="Personal[generate-id() = generate-id(key('keyName', Report/Dataset/History/Claim/Subject/Name/First)[1])]" > <xsl:sort select="Admin" /> <li> <xsl:value-of select="Report/Dataset/History/Claim" /> <ul> <xsl:for-each select="key('keyName', Report/Dataset/History/Claim/Subject/Name/First)" > <li> <xsl:value-of select="Name"/> </li> </xsl:for-each> </ul> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet>
我没有按预期获得数据..请在这里指导我。
答案 0 :(得分:0)
您的问题(可能)是由于XML区分大小写。在你的XML中你有这个:
<Report>
<DataSet>
但是在你的密钥中(当你使用密钥时),你会这样做:
use =“Report / Dataset / History / Claim / Subject / Name / First”/&gt;
因此,XML具有DataSet
,但您的密钥使用Dataset
,它们是不同的。你的密钥必须像这样
<xsl:key name="keyName" match="Personal"
use="Report/DataSet/History/Claim/Subject/Name/First" />
类似于使用密钥时。
另一个问题是您的xsl:for-each
<xsl:for-each select="key('keyName', Report/DataSet/History/Claim/Subject/Name/First)" >
<li>
<xsl:value-of select=Name"/>
</li>
</xsl:for-each>
您在这里位于Personal
元素,因此<xsl:value-of select=Name"/>
需要相对于
<xsl:value-of select="Report/DataSet/History/Claim/Subject/Name"/>