簡體   English   中英

在xslt版本1.0中匹配屬性名稱

[英]Match attribute name in xslt version 1.0

我有這個XML檔案

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

我只想提交以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文件的情況下是否可以獲得相同的行為?

如果您需要使用一些與元素名稱相關的規則來選擇元素,則可以使用以下方法:

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

local-name()是名稱元素(如果有)之后的部分元素名稱,即SIM_MPLD等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM