我有以下XML,我想提取所有 title_en 属性。
<quiz>
<question title_de="Seit wann wird Appenzeller® Käse hergestellt?"
title_fr="Depuis quand le fromage d’Appenzell est-il fabriqué?"
title_en="For how long has Appenzeller cheese been made?" >
<answer title_de="Über 7 Jahre!" title_fr="Depuis plus de 7 ans !" title_en="For over 7 years !"></answer>
<answer title_de="Über 70 Jahre!" title_fr="Depuis plus de 70 ans !" title_en="For over 70 years !"></answer>
<answer title_de="Über 700 Jahre!" title_fr="Depluis plus de 700 ans !" title_en="For over 700 years !"></answer>
</question>
</quiz>
这是我的XSLT:
<xsl:template match="answer">
<tr>
<td><xsl:value-of select="@title_en"/></td>
</tr>
</xsl:template>
<xsl:template match="question">
<tr>
<td><xsl:value-of select="@title_en"/></td>
</tr>
</xsl:template>
我可以从问题或答案中获取属性,但绝不能从两者中获取。我尝试过所有类型的匹配声明
答案 0 :(得分:2)
您似乎只包含了XSLT的一部分,也许这就是您要寻找的内容:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/quiz">
<xsl:apply-templates select="question"/>
</xsl:template>
<xsl:template match="answer">
<tr>
<td>
<xsl:value-of select="@title_en"/>
</td>
</tr>
</xsl:template>
<xsl:template match="question">
<tr>
<td>
<xsl:value-of select="@title_en"/>
<xsl:apply-templates select="answer"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
我认为你错过了问题模板中的<xsl:apply-templates select="answer"/>
。您需要修改HTML,因为现在在问题TD中输出TR标记如下:
<tr>
<td>For how long has Appenzeller cheese been made?<tr>
<td>For over 7 years !</td>
</tr>
<tr>
<td>For over 70 years !</td>
</tr>
<tr>
<td>For over 700 years !</td>
</tr>
</td>
</tr>
答案 1 :(得分:0)
PLS。尝试类似的事情:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="quiz">
<xsl:choose>
<xsl:when test="question[@title_en]">
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="question/answer"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="answer">
<tr>
<td>
<xsl:value-of select="@title_en"/>
</td>
</tr>
</xsl:template>
<xsl:template match="question">
<tr>
<td>
<xsl:value-of select="@title_en"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>