您好我正在尝试将样式表提供给下面的xml:但是我只是不知道我的xpath有什么问题。我试过引用每个网站然而它只是没有呈现。
<careTeames>
<careteame>
<PCP>JONES,MARY</PCP>
<type>Ped - Under 5</type>
<caregivers/>
<providers>
<provider>Henderson,Wilson</provider>
<providertype>Cardilogist</providertype>
<provider>H,WILLIAM</provider>
<providertype>OPTHOMOLGY</providertype>
</providers>
</careteame>
<careteame>
<PCP>JONES,MARY2</PCP>
<type>Ped - Under 5</type>
<caregivers/>
<providers>
<provider>Henderson,Wilson2</provider>
<providertype>Cardilogist2</providertype>
<provider>H,WILLIAM2</provider>
<providertype>OPTHOMOLGY2</providertype>
</providers>
</careteame>
</careTeames>
我只想要一个简单的输出:
PCP JONES, MARY
PROVIDERS Henderson, Wilson
H, William
我的xsl能够产生PCP的第一行但是另一行 - 每次都失败:(
<xsl:template match="/">
<html>
<body>
<h2>Data</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>col1</th>
<th>col2</th>
</tr>
<xsl:for-each select="return/careTeames/careteame">
<tr>
<td><xsl:value-of select="PCP" /></td>
<td><xsl:value-of select="type" /></td>
</tr>
<xsl:for-each select="return/careTeames/careteame/caremanagers">
<tr><td><xsl:value-of select="caremanagertype"/></td><td>( <xsl:value-of select="caremanagertype"/> )</td></tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
答案 0 :(得分:0)
问题是当你这样做时......
<xsl:for-each select="return/careTeames/careteame">
然后在 xsl:for-each 循环中,您当前的上下文将是 careteame 。这意味着嵌套的 xsl:for-each 将与此相关。也就是说它将寻找路径return/careTeames/careteame/caremanagers
作为当前节点的后代。
所以,而不是这样做
<xsl:for-each select="return/careTeames/careteame/caremanagers">
此时你真正需要做的就是这个
<xsl:for-each select="caremanagers">
或者更确切地说,您需要这样做,因为您的XML示例中没有 caremanagers (也没有返回元素)。
<xsl:for-each select="providers/provider">
实际上,使用模板匹配通常更好,而不是 xsl:for-each 。试试这个与你当前的XML样本匹配的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Data</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>col1</th>
<th>col2</th>
</tr>
<xsl:apply-templates select="return/careTeames/careteame"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="careteame">
<tr>
<td>
<xsl:value-of select="PCP"/>
</td>
<td>
<xsl:value-of select="type"/>
</td>
</tr>
<xsl:apply-templates select="providers/provider"/>
</xsl:template>
<xsl:template match="provider">
<tr>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>