2010-01-08 166 views
1

我们有XML文件像下面...忽略名称空间T:前缀

<?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这确实预示[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> 

怎么用这个方法解决了我们的问题?用这个什么后果吗? 我已经搜索了这个,但没有得到功能。

在此先感谢..

回答

2

我没有看到您的方法有任何问题。对于正确匹配

XSLT任务完全合格的名称,因此,使用您的XSLT前缀名字空间是正确的解决方案;这就是为什么你解决了你的问题。

+0

好的,我已经理解了前缀名称空间的方法。 感谢您的帮助。 – 2010-02-02 10:52:51