【问题标题】:XML Transformation with labels using a stylesheet使用样式表的带有标签的 XML 转换
【发布时间】:2013-04-01 14:47:51
【问题描述】:

我有来自 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>

不幸的是,这只适用于没有标签并且摘要直接在 "abstract" 下提供的情况。我必须如何修改 XSL 的这段摘录以使其传输“抽象”下提到的所有内容?

干杯 vier.gewinnt

【问题讨论】:

  • 你能发布你想要的输出吗?这对提供答案的人很有帮助,因为他们可以根据您的要求更好地调整答案。
  • 当然。我正在使用 Filemaker 并导入 xml。最后我想要数据库的一个字段中所有标签的内容,用逗号分隔。如果有人可以提供帮助,那就太好了。
  • 那么&lt;COL&gt;&lt;DATA&gt;one,two,three,four&lt;/DATA&gt;&lt;/COL&gt;?
  • 而是 背景、方法、结果、结论

标签: xml xslt label transformation


【解决方案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>

【讨论】:

  • 您似乎没有运行您提出的解决方案,否则您不会说它会产生您在此答案中提供的结果。
【解决方案2】:

这个简短而正确的转换

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2011-08-28
    相关资源
    最近更新 更多