2011-06-06 38 views
0

我有下面的XML,並希望通過該元件進行迭代作爲這樣的我可以在像一些格式顯示它:XSL命名空間和嵌套的xsl:for-每個

PIN 1<br/> 
&nbsp;&nbsp; XYZ<br/> 
&nbsp;&nbsp; HELLO<br/> 

PIN 2<br/> 
&nbsp;&nbsp; ABC<br/> 
&nbsp;&nbsp; HI<br/> 

XML:

<RootResponse xmlns:ip="urn:domain:tx:inPayment" xmlns:ipn="urn:domain:tx:Pin"> 
    <OutBoundMessage> 
     <ip:InfoMessage> 
     <ipn:Alert>PIN 1</ipn:Alert> 
     <ipn:Code> 
      <ip:CodeLabel>XYZ</ip:CodeLabel> 
      <ip:CodeMessage>HELLO</ip:CodeMessage> 
     </ipn:Code> 
     </ip:InfoMessage> 

     <ip:InfoMessage> 
     <ipn:Code> 
      <ipn:Alert>PIN 2</ipn:Alert> 
      <ip:CodeLabel>ABC</ip:CodeLabel> 
      <ip:CodeMessage>HI</ip:CodeMessage> 
     </ipn:Code> 
     </ip:InfoMessage> 
    </OutBoundMessage> 
</RootResponse> 

我似乎無法找到解決方案。任何建議?

回答

1

我會推薦以下W3C schools XSLT tutorial,這應該給你所有你需要解決這個相對簡單的XSLT問題。

你是對的,你將不得不關注命名空間,雖然這是非常簡單的。只需確保您的XSLT定義了所需的名稱空間,並且相應地在您的XPath語句中添加了元素名稱的前綴。請參閱以下內容:

XML Namespaces and How They Affect XPath and XSLT

0

你應該在你的XSLT聲明的命名空間,然後使用你的表情聲明的前綴。

下面是如何使用模板(即「推式」)而不是xsl:for-each(例如「拉式」)的例子。

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ip="urn:domain:tx:inPayment" 
xmlns:ipn="urn:domain:tx:Pin" 
exclude-result-prefixes="ip ipn"> 
    <xsl:output indent="yes" /> 

    <xsl:template match="ipn:Alert"> 
     <xsl:text>&#xA;</xsl:text> 
     <xsl:apply-templates /> 
     <br/> 
    </xsl:template> 

    <xsl:template match="ip:*[starts-with(local-name(),'Code')]"> 
     <xsl:text>&#xA;&#160;&#160;</xsl:text> 
     <xsl:apply-templates/> 
     <br/> 
    </xsl:template> 

</xsl:stylesheet>