无法在XSLT转换中正确获取嵌套标记

时间:2018-01-03 19:30:21

标签: xml xslt

我正在翻译并拥有如下所示的数据:

-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>

1 个答案:

答案 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>