2011-06-23 23 views
1

如何Concat的下面NVBusinessId數據如何CONCAT在XSLT值

<FinalBusinessDetails> 
<BusinessIdDetails xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails" 
        xmlns="http://www.portal.nv.gov/FinalCorporationDetails"> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV0511201142</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV0511201143</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV20111227759</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV20111227763</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV20111227763</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV20111227759</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV20111227802</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
</BusinessIdDetails> 

最終退出應在

<FinalBusinessDetails> 
    <BusinessIdDetails xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails" 
         xmlns="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>NV0511201142:NV0511201143:NV20111227759:NV20111227763</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
    </BusinessIdDetails> 
</FinalBusinessDetails> 
+0

問得好,+1。請參閱我的答案,以獲得一個完整的解決方案,它是所有答案中最短和最簡單的解決方案,它基於最基本的XSLT設計模式:重寫身份規則。 –

回答

0

XSLT:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails" 
    exclude-result-prefixes="ns0" 
> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="FinalBusinessDetails"> 
    <FinalBusinessDetails> 
     <BusinessIdDetails xmlns="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId> 
      <xsl:apply-templates select="//ns0:FinalBusinessIdDetails"/> 
      </ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     </BusinessIdDetails> 
    </FinalBusinessDetails> 
    </xsl:template> 


    <xsl:template match="ns0:FinalBusinessIdDetails"> 
    <xsl:value-of select="ns0:NVBusinessId/."/> 
    </xsl:template> 

</xsl:stylesheet> 

輸出:

<?xml version="1.0" encoding="utf-8"?> 
<FinalBusinessDetails> 
    <BusinessIdDetails xmlns="http://www.portal.nv.gov/FinalCorporationDetails"> 
    <ns0:FinalBusinessIdDetails xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:NVBusinessId>:NV0511201142:NV0511201143:NV20111227759:NV20111227763:NV20111227763:NV20111227759::NV20111227802</ns0:NVBusinessId> 
    </ns0:FinalBusinessIdDetails> 
    </BusinessIdDetails> 
</FinalBusinessDetails> 
0

這XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails"> 

    <xsl:template match="*"> 
     <xsl:apply-templates/> 
    </xsl:template> 
    <xsl:template match="FinalBusinessDetails"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="ns0:BusinessIdDetails"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <ns0:FinalBusinessIdDetails> 
       <xsl:apply-templates/> 
      </ns0:FinalBusinessIdDetails> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="."/> 
    </xsl:template> 
</xsl:stylesheet> 

產生以下結果:

<FinalBusinessDetails> 
    <BusinessIdDetails xmlns="http://www.portal.nv.gov/FinalCorporationDetails" xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:FinalBusinessIdDetails>:NV0511201142:NV0511201143:NV20111227759:NV20111227763:NV20111227763:NV20111227759::NV20111227802</ns0:FinalBusinessIdDetails> 
    </BusinessIdDetails> 
</FinalBusinessDetails> 
0

在XSLT 2.0生活似乎更容易一點。您可以直接使用xsl:value-of(最終也指定一個分隔符):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.portal.nv.gov/FinalCorporationDetails" 
    xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails" 
    xpath-default-namespace="http://www.portal.nv.gov/FinalCorporationDetails" 
    version="2.0"> 

    <xsl:output method="xml" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="BusinessIdDetails"> 
     <xsl:copy> 
      <ns0:FinalBusinessIdDetails> 
       <ns0:NVBusinessId> 
        <xsl:value-of select="//NVBusinessId/text()"/> 
       </ns0:NVBusinessId> 
      </ns0:FinalBusinessIdDetails> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

非常感謝它的效果很好 – anvv

+0

爲什麼你接受了其他答案呢? –

0

這個簡短和完整變換是基於最基本XSLT設計模式:重寫身份規則

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="*[1]/ns0:NVBusinessId"> 
    <xsl:copy> 
    <xsl:apply-templates select="/*/*/*/ns0:NVBusinessId/text()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="ns0:FinalBusinessIdDetails[position() >1]"/> 
</xsl:stylesheet> 

當應用於提供的XML文檔時

<FinalBusinessDetails> 
    <BusinessIdDetails xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails" xmlns="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV0511201142</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV0511201143</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV20111227759</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV20111227763</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV20111227763</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV20111227759</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
     <ns0:FinalBusinessIdDetails> 
      <ns0:NVBusinessId>:NV20111227802</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
    </BusinessIdDetails> 
</FinalBusinessDetails> 

的希望,正確的結果產生

<FinalBusinessDetails> 
    <BusinessIdDetails xmlns="http://www.portal.nv.gov/FinalCorporationDetails" xmlns:ns0="http://www.portal.nv.gov/FinalCorporationDetails"> 
     <ns0:FinalBusinessIdDetails> 
     <ns0:NVBusinessId>:NV0511201142:NV0511201143:NV20111227759:NV20111227763:NV20111227763:NV20111227759::NV20111227802</ns0:NVBusinessId> 
     </ns0:FinalBusinessIdDetails> 
    </BusinessIdDetails> 
</FinalBusinessDetails>