使用样式表使用标签进行XML转换

时间:2013-04-01 14:47:52

标签: xml xslt label transformation

我从pubmed获得了这部分XML:

<Abstract>

<AbstractText Label="BACKGROUND" NlmCategory="BACKGROUND"> one </AbstractText> 

<AbstractText Label="METHODS" NlmCategory="METHODS"> two </AbstractText>  

<AbstractText Label="RESULTS" NlmCategory="RESULTS"> three </AbstractText> 

<AbstractText Label="CONCLUSIONS" NlmCategory="CONCLUSIONS"> four</AbstractText>  

</Abstract>

根据文章的不同,有不同的数字标签(范围0-4)。转换的结果应为:

一,二,三,四

我用过这个XSL:

<COL>
<DATA>
<xsl:value-of select="abstract" />
</DATA>
</COL>

不幸的是,只有在没有标签且摘要直接在“摘要”下提供时,这才有效。我如何修改XSL的这个exerpt以使它转移“abstract”下提到的所有内容?

干杯 vier.gewinnt

2 个答案:

答案 0 :(得分:1)

这是一个可能适合您的解决方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>

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

    <xsl:template match="AbstractText">
        <xsl:value-of select="@Label"/><xsl:text>,</xsl:text>
    </xsl:template>

</xsl:stylesheet>

将此应用于您的输入产生:

<?xml version="1.0" encoding="UTF-8"?>
<COL>
    <DATA>BACKGROUND,METHODS,RESULTS,CONCLUSIONS,</DATA>
</COL>

答案 1 :(得分:0)

此简短正确转换

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

 <xsl:template match="/*">
  <COL>
    <DATA>
      <xsl:apply-templates/>
    </DATA>
  </COL>
 </xsl:template>

 <xsl:template match="*/*">
  <xsl:if test="not(position()=1)">, </xsl:if>
  <xsl:apply-templates select="@Label"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<Abstract>
    <AbstractText Label="BACKGROUND" NlmCategory="BACKGROUND">one</AbstractText>
    <AbstractText Label="METHODS" NlmCategory="METHODS">two</AbstractText>
    <AbstractText Label="RESULTS" NlmCategory="RESULTS">three</AbstractText>
    <AbstractText Label="CONCLUSIONS" NlmCategory="CONCLUSIONS">four</AbstractText>
</Abstract>

会产生想要的正确结果:

<COL>
   <DATA>BACKGROUND, METHODS, RESULTS, CONCLUSIONS</DATA>
</COL>