2016-10-25 2 views
0

Привет всем У меня есть файл XML, содержащий следующий раздел:XSL для каждого - получить одно значение из узлов

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

Не могли бы вы рассказать мне, как я могу это решить?

ответ

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> 

Примечание вам придется обновлять объявление пространства имен, чтобы соответствовать вашим требованиям, собственно, как вы не показали это в вашем вопросе.

+0

спасибо большое @Tim C, он отлично работает !!! –

Смежные вопросы