匹配xslt版本1.0中的属性名称

时间:2016-12-30 14:46:35

标签: xml xslt xslt-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文件的情况下获得相同的行为吗?

1 个答案:

答案 0 :(得分:1)

如果您需要使用与元素名称相关的某些规则来选择元素,那么您可以使用以下内容:

MainActivity

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

相关问题