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