XSL选择其中属性可以是大写或小写的(XSL selector where attribute ca

2019-11-05 07:18发布

什么为节点值,其中一个属性可以是上或下壳体(或组合)的XSL选择? 下面是一个例子(我已经剥去太多不相关的XML的)。 第一个具有“网络ID”的属性。 后者是“NETWORKID”。 我需要获得“身份”节点的值。

属性是“网络ID”。

<?xml version="1.0" encoding="UTF-8"?>
<cXML payloadID="1541780158582-6094783182107158181@216.109.111.67" timestamp="2018-11-09T08:15:58-08:00">
    <Header>
        <To>
            <Credential domain="networkid">
                <Identity>AN01000000000-T</Identity>
            </Credential>
        </To>
    </Header>
</cXML>

属性是“NETWORKID”。

<?xml version="1.0" encoding="UTF-8"?>
<cXML payloadID="1541780158582-6094783182107158181@216.109.111.67" timestamp="2018-11-09T08:15:58-08:00">
    <Header>
        <To>
            <Credential domain="NetworkID">
                <Identity>AN01000000000-T</Identity>
            </Credential>
        </To>
    </Header>
</cXML>

有没有办法做到这一点,以便它忽略了呢?

<xsl:value-of select="Header/To/Credential[@domain='networkid']/Identity"/>

在我的应用中,上述工作在一种情况下。 我不得不手动将其更改为得到它在其他工作(但它打破了之前)。

Answer 1:

如果您可以使用XSLT 2.0,然后更换您:

<xsl:value-of select="Header/To/Credential[@domain='networkid']/Identity"/>

有:

<xsl:value-of select="Header/To/Credential[lower-case(@domain)='networkid']/Identity"/>

在XSLT 1.0,定义:

<xsl:variable name="upper-case" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="lower-case" select="'abcdefghijklmnopqrstuvwxyz'"/>

然后使用:

<xsl:value-of select="Header/To/Credential[translate(@domain, $upper-case, $lower-case)='networkid']/Identity"/>


文章来源: XSL selector where attribute can be upper or lowercase
标签: xml xslt