2016-12-30 5 views
0

У меня есть этот XML-файлMatch атрибут в XSLT версии 1.0

<REFERENCES> 
    <COMPLETE REFERENCE="ABC1" /> 
    <CODIGO_SIM REFERENCE="ABC1" /> 
    <ETAPA REFERENCE="C1" /> 
    <NPP_SERIE REFERENCE="NAOBI" /> 
    <SIM_MPLD REFERENCE="METALIC" /> 
    <SIM_COCI REFERENCE="NOTTE" /> 
    <SIM_ANCH REFERENCE="563" /> 
    <NP_TIPO REFERENCE="Placard" /> 
</REFERENCES> 

Я хочу FILER только те записи, начинающиеся с SIM_, но я не мог, поэтому я изменил файл, добавив имя атрибут к его значению, например:

<REFERENCES> 
    <COMPLETE REFERENCE="ABC1" /> 
    <CODIGO_SIM REFERENCE="ABC1" /> 
    <ETAPA REFERENCE="C1" /> 
    <NPP_SERIE REFERENCE="NAOBI" /> 
    <SIM_MPLD REFERENCE="SIM_MPLD|METALIC" /> 
    <SIM_COCI REFERENCE="SIM_COCCI|NOTTE" /> 
    <SIM_ANCH REFERENCE="SIM_ANCH|563" /> 
    <NP_TIPO REFERENCE="Placard" /> 
</REFERENCES> 

и поэтому я могу фильтровать эти записи с этим:

<xsl:variable name="CodigoSim" select="REFERENCES/CODIGO_SIM/@REFERENCE" /> 
    <xsl:for-each select="REFERENCES//.//@REFERENCE" > 
     <xsl:if test="starts-with(., 'SIM_')" > 
      <xsl:value-of select="$CodigoSim"/> 
      <xsl:text>|</xsl:text> 
      <xsl:value-of select=" substring-after(., 'SIM_')" /> 
      <xsl:value-of select="substring-after(., '|')" /> 
      <xsl:call-template name="QuebrarLinha"/> 
     </xsl:if> 
    </xsl:for-each> 

, который делает именно то, что я хочу. Есть ли способ получить такое же поведение без изменения XML-файла?

ответ

1

Если вам нужно выбрать элементы, используя некоторые правила, связанные с именем элемента, то вы можете использовать что-то вроде этого:

<xsl:for-each select="REFERENCES/*[starts-with(local-name(), 'SIM_')]"> 
    <xsl:value-of select="$CodigoSim"/> 
    ... 
</xsl:for-each> 

местного названия() является имя той части элемента, который приходит после того, как пространство имен (если таковые имеются) , т.е. SIM_MPLD и т. д.