Как конвертировать этот XML с XSLT - PullRequest
1 голос
/ 30 декабря 2011

У меня есть файл 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 Ответ

2 голосов
/ 30 декабря 2011

Это преобразование :

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