我正在翻译并拥有如下所示的数据:
-MainTag1
---价值一
---价值二
---子标签
------ SubValue1
------ Subvalue2
-MainTag2
---价值三
---价值四
---子标签
------ SubValue3
------ Subvalue4
在进行模板匹配时,我尝试将嵌套称为“应用模板”,但我得到的结果是MainTag1,Value One,Value Two,SubValue1,SubValue2,SubValue3,SubValue4并且它通过MainTag2,Value Three和价值四。我想要的输出是列出的值列表,但我不想只是获取文本(因为我要添加更多的东西。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<binder>
<catalog>
<Name> Catalog 1 </Name>
<Page> Page 1 </Page>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>One night only</title>
<artist>Bee Gees</artist>
<country>UK</country>
<company>Polydor</company>
<price>10.90</price>
<year>1998</year>
</cd>
</catalog>
<catalog>
<Name> Catalog 2 </Name>
<Page> Page 7 </Page>
<cd>
<title>Big Willie style</title>
<artist>Will Smith</artist>
<country>USA</country>
<company>Columbia</company>
<price>9.90</price>
<year>1997</year>
</cd>
<cd>
<title>Unchain my heart</title>
<artist>Joe Cocker</artist>
<country>USA</country>
<company>EMI</company>
<price>8.20</price>
<year>1987</year>
</cd>
</catalog>
<binder>
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="/">
<xsl:apply-templates select="binder/catalog" />
</xsl:template>
<xsl:template match="catalog">
<xsl:value-of select="Name"/>
<xsl:value-of select="Page"/>
<xsl:for-each select="cd">
<xsl:value-of select="title"/>
<xsl:value-of select="artist"/>
<xsl:comment>***Want to reference the "Name" tag again, so I could do something like ("title" rdfs:subClassOf "Name")***</xsl:comment>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
如果你只想按照它们出现的顺序排列text()
个节点,那么删除所有模板并使用默认模板:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
</xsl:stylesheet>
默认处理将匹配元素,然后将模板应用于其子节点。 text()
的默认处理会将其复制到输出中。
上面的样式表与此相似,但有模板可以明确显示默认情况:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()">
<xsl:copy/>
</xsl:template>
<xsl:template match="comment() | processing-instruction() | @*"/>
</xsl:stylesheet>