2013-03-21 1 views
0

Мне нужно изменить пространство имен корневого узла и добавить префикс пространства имен только для корневого элемента, а не для дочерних элементов.Добавить префикс пространства имен К корневому узлу

я следующий XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Class xmlns="https://api.ladbrokes.com/v1/sportsbook-couchbase/SportsbookCouchbase.xsd"> 
<blurb >Test</blurb> 
<channels > 
<e >I</e> 
<e >J</e> 
<e >K</e> 
</channels> 
<classSortCode >Test</classSortCode> 
<classStatus >Test</classStatus> 
<creationDateTime >2013-03-21T22:29:01.58+05:30</creationDateTime> 
<isActive >true</isActive> 
<lastUpdatedDateTime >2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
<locale >Test</locale> 
</Class> 

И мне это нужно, чтобы стать

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
<blurb >Test</blurb> 
<channels > 
<e >I</e> 
<e >J</e> 
<e >K</e> 
</channels> 
<classSortCode >Test</classSortCode> 
<classStatus >Test</classStatus> 
<creationDateTime >2013-03-21T22:29:01.58+05:30</creationDateTime> 
<isActive >true</isActive> 
<lastUpdatedDateTime >2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
<locale >Test</locale> 
</ns0:Class> 

Могу ли я достичь этого с помощью XSLT? Пожалуйста, помогите мне в этом отношении.

Спасибо, Siva

+0

В вашем примере, дочерние элементы были изменены, находясь в '... SportsbookCouchbase.xsd' имен в' NULL' имен. Это было намеренно? – JLRishe

+0

да сэр, это был намеренный. –

ответ

1

Это, как вы можете дать элемент документа в другое пространство имен и переместить все остальные элементы в нуль пространства имен:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

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

    <xsl:template match="/*"> 
    <xsl:element name="ns0:{local-name()}"> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="*/*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

При запуске на своем входе образца, результат:

<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <blurb>Test</blurb> 
    <channels> 
    <e>I</e> 
    <e>J</e> 
    <e>K</e> 
    </channels> 
    <classSortCode>Test</classSortCode> 
    <classStatus>Test</classStatus> 
    <creationDateTime>2013-03-21T22:29:01.58+05:30</creationDateTime> 
    <isActive>true</isActive> 
    <lastUpdatedDateTime>2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
    <locale>Test</locale> 
</ns0:Class> 

для уточнения, это то, как вы можете изменить пространство имен для элемента документа и оставить все ELS e в пространстве имен, которое они уже имели.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

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

    <xsl:template match="/*"> 
    <xsl:element name="ns0:{local-name()}"> 
     <xsl:copy-of select="namespace::*" /> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

И это результат этого. Обратите внимание на небольшую, но существенную разницу в декларациях пространства имен в верхней части:

<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd" 
    xmlns="https://api.ladbrokes.com/v1/sportsbook-couchbase/SportsbookCouchbase.xsd"> 
    <blurb>Test</blurb> 
    <channels> 
    <e>I</e> 
    <e>J</e> 
    <e>K</e> 
    </channels> 
    <classSortCode>Test</classSortCode> 
    <classStatus>Test</classStatus> 
    <creationDateTime>2013-03-21T22:29:01.58+05:30</creationDateTime> 
    <isActive>true</isActive> 
    <lastUpdatedDateTime>2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
    <locale>Test</locale> 
</ns0:Class> 
+0

Спасибо за тонну, я работал на меня. –

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

  • Нет связанных вопросов^_^