【问题标题】:XSL for each - get single value from nodes每个的 XSL - 从节点获取单个值
【发布时间】:2016-10-25 10:00:28
【问题描述】:

大家好,我有一个包含以下部分的 xml 文件:

<sml:inputs>
<sml:InputList>
      <sml:input name="instrument_A">
          <sml:ObservableProperty definition="instrument_A"/>
      </sml:input>
      <sml:input name="instrument_B">
          <sml:ObservableProperty definition="instrument_B"/>
      </sml:input>
      <sml:input name="instrument_C">
          <sml:ObservableProperty definition="instrument_C"/>
      </sml:input>
      <sml:input name="instrument_D">
          <sml:ObservableProperty definition="instrument_D"/>
      </sml:input>              
</sml:InputList>

我想做的是写一个XSL 文件,它给我以下输出:

 <gmd:keyword>
     <gco:CharacterString>instrument_A</gco:CharacterString>
 </gmd:keyword>
 <gmd:keyword>
     <gco:CharacterString>instrument_B</gco:CharacterString>
 </gmd:keyword>
 <gmd:keyword>
    <gco:CharacterString>instrument_C</gco:CharacterString>
 </gmd:keyword>
 <gmd:keyword>
     <gco:CharacterString>instrument_D</gco:CharacterString>
 </gmd:keyword>

我试过这个:

<xsl:for-each select="/sml:inputs/sml:InputList/sml:input">
    <xsl:value-of select="@name"/>

但是我得到了以下错误的结果:

<gmd:keyword>instrument_Ainstrument_Binstrument_Cinstrument_D</gmd:keyword>

您能告诉我如何解决这个问题吗?

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    您尚未在创建gmd:keyword 元素的位置显示现有代码,但我猜您是在xsl:for-each 之外执行此操作,因此它只创建一次,并且包含您的所有文本。

    您只需将其移动到xsl:for-each 内。

    作为初学者,试试这个 XSLT

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
            xmlns:sml="sml" xmlns:gmd="gmd" xmlns:gco="gco"
            exclude-result-prefixes="sml">
        <xsl:output method="xml" indent="yes" />
    
        <xsl:template match="/">
            <gmd:ouptput>
                <xsl:for-each select="/sml:inputs/sml:InputList/sml:input">
                    <gmd:keyword>
                        <gco:CharacterString>
                            <xsl:value-of select="@name"/>
                        </gco:CharacterString>
                    </gmd:keyword>
                </xsl:for-each>
            </gmd:ouptput>
        </xsl:template>
    </xsl:stylesheet>
    

    请注意,您必须更新命名空间声明以符合您的实际要求,因为您没有在问题中显示这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 2011-09-07
      相关资源
      最近更新 更多