2013-08-19 146 views
2

我正在處理這個片段,但是,我正在獲得預期的輸出。XML沒有正確生成

這裏是我的輸入

<?xml version="1.0" encoding="UTF-8" ?> 
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader"> 
    <EnvelopeVersion>1.0</EnvelopeVersion> 
    <GovTalkDetails> 
    <Keys/> 
    </GovTalkDetails> 
    <Body> 
    <NameSearch> 
     <ContinuationKey>fcb844eELdiGt/AO3sMH2IGP8Amoxy+wewviAdon</ContinuationKey> 
     <RegressionKey>fcb844eJyt0ttO20moxy+wewviAdon</RegressionKey> 
     <SearchRows>100</SearchRows> 
     <CoSearchItem> 
     <CompanyName>WILLIAM ROSE LTD</CompanyName> 
     <CompanyNumber>07905646</CompanyNumber> 
     <DataSet>LIVE</DataSet> 
     <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus> 
     <CompanyDate></CompanyDate> 
     </CoSearchItem> 
    </NameSearch> 
    </Body> 
</GovTalkMessage> 

而且,這裏是我的XSLT

<?xml version="1.0"?> 
<xsl:stylesheet xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:template match="GovTalkMessage/Body/NameSearch/CoSearchItem"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 

我的預期輸出是

<CoSearchItem> 
    <CompanyName>WILLIAM ROSE LTD</CompanyName> 
    <CompanyNumber>07905646</CompanyNumber> 
    <DataSet>LIVE</DataSet> 
    <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus> 
    <CompanyDate></CompanyDate> 
</CoSearchItem> 

請人幫忙哪裏出了問題。

+1

而你的*實際*輸出是...? –

+0

期望的輸出? – Sid

回答

0

我已經使用了以下實現我想要的輸出

<xsl:template match="/*[local-name()='GovTalkMessage']/*[local-name()='Body']/*[local-name()='NameSearch']/*[local-name()='CoSearchItem']"> 
<xsl:copy-of select="."/> 
</xsl:template> 

和,它的工作原理。感謝所有。

1

應用的第一個模板用於根節點,如果完全使用它們,則需要指定命名空間。

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:g="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 

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

    <xsl:template match="/"> 
    <xsl:copy-of select="/g:GovTalkMessage/g:Body/g:NameSearch/g:CoSearchItem"/> 
    </xsl:template> 

</xsl:stylesheet> 

<xsl:output/><xsl:strip-space/>只是修復縮進。

輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<CoSearchItem xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader"> 
    <CompanyName>WILLIAM ROSE LTD</CompanyName> 
    <CompanyNumber>07905646</CompanyNumber> 
    <DataSet>LIVE</DataSet> 
    <CompanyIndexStatus>DISSOLVED</CompanyIndexStatus> 
    <CompanyDate/> 
</CoSearchItem> 
1

由於您使用XSLT 2.0,您也可以使用xpath-default-namespace屬性。這樣你就不必在xpaths中使用前綴。

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
    xpath-default-namespace="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
    version="2.0"> 

    <xsl:template match="/"> 
     <xsl:copy-of select="GovTalkMessage/Body/NameSearch/CoSearchItem"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

爲了明確Daniel Haley相信您理解的內容:您的問題是您沒有在XPath表達式中使用名稱空間前綴,儘管您的元素全部位於名稱空間中。 –