2009-06-18 55 views
1

我有一個調用(基於軸)的Web服務,以獲得以下格式的響應的應用程序:的Java,XSLT:如何處理由Axis生成的動態命名空間中的XSLT

 
<?xml version="1.0"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <axis2ns394:ServiceLevelDetailsResponse xmlns:axis2ns394="urn:myco:com:mapping:service:3.0"> 
      <ns1:errorFlag xmlns:ns1="urn:myco:com:mapping:service:3.0">false</ns1:errorFlag> 
      <axis2ns394:customerProgram> 
       <axis2ns394:name>ABC</axis2ns394:name> 
       <axis2ns394:description>ABC SERVICES</axis2ns394:description> 
       <axis2ns394:programRank>1</axis2ns394:programRank> 
       <axis2ns394:bindOptions> 
        <axis2ns394:name>PRO1A</axis2ns394:name> 
        <axis2ns394:description>Complete Home Solution</axis2ns394:description> 
        <axis2ns394:programName>PROMO</axis2ns394:programName> 
        <axis2ns394:programDescription>Promotional Bundle 1A</axis2ns394:programDescription> 
       </axis2ns394:bindOptions> 
       <axis2ns394:bindOptions> 
        <axis2ns394:name>PRO2A</axis2ns394:name> 
        <axis2ns394:description>Buy 1 Get 1 Free</axis2ns394:description> 
        <axis2ns394:programName>PROMO</axis2ns394:programName> 
        <axis2ns394:programDescription>Promotional Bundle 2A</axis2ns394:programDescription> 
       </axis2ns394:bindOptions> 
      </axis2ns394:customerProgram> 
     </axis2ns394:ServiceLevelDetailsResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 


在這裏 - 在命名空間'axis2ns394'是在運行時動態生成的。我需要編寫一個XSLT來將這個XML扁平化爲一個更簡單的XML(對每個'customerProgram'說一個html表格,每行包含一行)。但我不知道如何處理這些動態命名空間。

任何幫助將不勝感激。

問候,
- 阿希什

回答

4

是在命名空間動態,或命名前綴動態?

爲XML的實際名稱空間是

所以,一個例子樣式錶轉換的結果並不需要知道什麼名稱空間前綴是,但什麼命名空間是。只要您正確聲明名稱空間,就可以在XSLT中使用不同的名稱空間前綴,並且它將匹配元素。

例如這個樣式表聲明的名稱空間前綴MYCO命名空間甕:MYCO:COM:映射:服務:3.0

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:myco="urn:myco:com:mapping:service:3.0" 
> 

<xsl:template match="/"> 
<table border="1"> 
<thead> 
<tr> 
<th>Name</th> 
<th>Description</th> 
<th>Program Rank</th> 
</tr> 
</thead> 
    <xsl:apply-templates select="//myco:customerProgram" /> 
</table> 
</xsl:template> 

<xsl:template match="myco:customerProgram"> 
<tr> 
    <td> 
    <xsl:value-of select="myco:name" /> 
    </td> 
<td> 
    <xsl:value-of select="myco:description" /> 
    </td> 
<td> 
    <xsl:value-of select="myco:programRank" /> 
    </td> 

</tr> 
</xsl:template> 
</xsl:stylesheet> 

將產生:

<table border="1"> 
<thead> 
<tr> 
<th>Name</th> 
<th>Description</th> 
<th>Program Rank</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td>ABC</td> 
<td>ABC SERVICES</td> 
<td>1</td> 
</tr> 
</tbody> 
</table> 
+1

+1 - 關於xmlns屬性實際做什麼的常見誤解 – kdgregory 2009-06-18 00:41:57