使用t:前缀忽略名称空间

时间:2010-01-08 11:51:17

标签: xslt transform

我们有如下的XML文件......

<?xml version='1.0'?>
<T0020 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.safersys.org/namespaces/T0020V1 T0020V1.xsd"
    xmlns="http://www.safersys.org/namespaces/T0020V1">

    <IRP_ACCOUNT>
        <IRP_CARRIER_ID_NUMBER>1213561</IRP_CARRIER_ID_NUMBER>
        <IRP_BASE_COUNTRY>US</IRP_BASE_COUNTRY>
        <IRP_BASE_STATE>AL</IRP_BASE_STATE>
        <IRP_ACCOUNT_NUMBER>15485</IRP_ACCOUNT_NUMBER>
        <IRP_ACCOUNT_TYPE>I</IRP_ACCOUNT_TYPE>
        <IRP_STATUS_CODE>0</IRP_STATUS_CODE>
        <IRP_STATUS_DATE>2004-02-23</IRP_STATUS_DATE>
        <IRP_UPDATE_DATE>2007-03-09</IRP_UPDATE_DATE>
        <IRP_NAME>
            <NAME_TYPE>LG</NAME_TYPE>
            <NAME>WILLIAMS TODD</NAME>
            <IRP_ADDRESS>
                <ADDRESS_TYPE>MA</ADDRESS_TYPE>
                <STREET_LINE_1>P O BOX 1210</STREET_LINE_1>
                <STREET_LINE_2/>
                <CITY>MARION</CITY>
                <STATE>AL</STATE>
                <ZIP_CODE>36756</ZIP_CODE>
                <COUNTY/>
                <COLONIA/>
                <COUNTRY>US</COUNTRY>
            </IRP_ADDRESS>
        </IRP_NAME>
    </IRP_ACCOUNT>
</T0020>

为了将这个XML数据插入数据库,我们使用了两个XSLT。 首先,XSLT将从XML文件中删除名称空间,并将此XML转换为某个中间名 某些临时位置上的XML(比如Process.xml)文件。

然后我们正在使用该中间xml(没有命名空间行)并应用另一个XSL 将xml字段映射到数据库。

然后我们找到了解决方案,并且我们只使用了一个XSLT来执行bode [1]删除命名空间和[2]将XML字段映射到数据库以插入数据。

我们的最终样式表包含以下行

xmlns:t="http://www.safersys.org/namespaces/T0020V1">

我们使用以下来将字段映射到数据库

  <xsl:template match="/">
       <xsl:element name="T0020">
           <xsl:apply-templates select="t:T0020/t:IRP_ACCOUNT" /> 
      </xsl:element>
 </xsl:template>

我们的问题是如何通过这种方法解决的?使用此方法会产生什么后果? 我已经搜索了这个但没有获得功能。

先谢谢..

1 个答案:

答案 0 :(得分:2)

我认为你的做法没有任何问题。

XSLT要求正确匹配的完全限定名称,因此在XSLT中使用带前缀的命名空间是正确的解决方案;这就是你解决问题的原因。