2013-08-19 2 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

И чтобы явным образом дал понять, что Даниэль Хейли вам доверял: ваша проблема в том, что вы не использовали префиксы пространства имен в выражениях XPath, хотя ваши элементы все находятся в пространстве имен. –

Смежные вопросы