如何使用XSLT转换此XML

时间:2011-12-30 18:04:07

标签: xml xslt xslt-2.0

我有一个格式为

的XML文件
<paragraph> Some Free text goes here<LinkType1 href="link1" >LinkName1</LinkType1> Then some more text <LinkType2 href="link2" >LinkName2</LinkType2>Then some more text <LinkType1 href =link3" >LinkName3</LinkType1> and then some more text
</paragraph>

此XML表示一段文本,其中嵌入了一些链接。换句话说,它是本文中的文本和节点。

我需要将其转换为HTML,如下所示:

<p>
Some Free text goes here<a href="link1" target="_blank" >LinkName1</a> Then some more text <a href="link2"  target="_blank" >LinkName2</a>Then some more text <a href =link3"  target="_blank" >LinkName3</a> and then some more text
</p>

如何使用XSLT进行此类转换?

1 个答案:

答案 0 :(得分:2)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="paragraph">
  <p><xsl:apply-templates/></p>
 </xsl:template>

 <xsl:template match="*[starts-with(name(), 'LinkType')]">
  <a href="{@href}" target="_blank" >
   <xsl:value-of select="."/>
  </a>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档(已更正为格式正确!):

<paragraph> Some Free text goes here
    <LinkType1 href="link1" >LinkName1</LinkType1> Then some more text 
    <LinkType2 href="link2" >LinkName2</LinkType2>Then some more text 
    <LinkType1 href ="link3" >LinkName3</LinkType1> and then some more text 
</paragraph>

生成想要的正确结果

<p> Some Free text goes here
    <a href="link1" target="_blank">LinkName1</a> Then some more text 
    <a href="link2" target="_blank">LinkName2</a>Then some more text 
    <a href="link3" target="_blank">LinkName3</a> and then some more text 
</p>