在XSLT中使用2个不同的命名空间

时间:2017-06-29 13:11:47

标签: xml xslt

我有这个源XML,即使用2个名称空间。

<SyncAssetMaster xmlns="http://schema.infor.com/InforOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" languageCode="en-US" releaseID="9.2" systemEnvironmentCode="Production" versionID="2.8.0">
    <ApplicationArea>
        <CreationDateTime>2017-06-29T12:06:03Z</CreationDateTime>
    </ApplicationArea>
    <DataArea>
        <AssetMaster>
            <UserArea>
                <D xmlns="http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" n="380">SVP245</D>
                <D xmlns="http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" n="383">SVP245 v1</D>
            </UserArea>
        </AssetMaster>
    </DataArea>
</SyncAssetMaster>

D元素有一个不同的命名空间,我在XSLT中声明,从在线的其他类似例子中可以看出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schema.infor.com/InforOAGIS/2" xmlns:nsWS="http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />   

    <xsl:template match="//my:SyncAssetMaster"> 
        <DataArea>
            <CreationDateTime><xsl:value-of select="//my:CreationDateTime"/></CreationDateTime>
            <ExtensionDate1><xsl:value-of select="//nsWS:UserArea/nsWS:D[@n='380']"/></ExtensionDate1>
        </DataArea>
    </xsl:template>
</xsl:stylesheet>

这是必需的输出。 ExtensionDate1不会出现。当然,它很简单,我感谢任何帮助。

<?xml version="1.0" encoding="UTF-8"?>
<DataArea xmlns:nsWS="http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result" xmlns:my="http://schema.infor.com/InforOAGIS/2">
    <CreationDateTime>2017-06-29T12:06:03Z</CreationDateTime>
    <ExtensionDate1>SVP245</ExtensionDate1>
</DataArea>

1 个答案:

答案 0 :(得分:1)

UserArea元素位于您绑定到前缀my的命名空间中,因此您要在其中选择它,您需要使用my:UserArea而不是nsWS:UserArea试过了。