大家好我有一个包含以下部分的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>
请告诉我如何解决这个问题?
答案 0 :(得分: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>
请注意,您必须更新命名空间声明以符合您的实际要求,因为您未在问题中显示此内容。