2016-11-30 17 views
0

私はXML出力を生成するプログラムを持っています。デフォルトの名前空間を持つ プログラムは次のようになります。XMLドキュメントの名前空間を更新できません

<n0:eCPR xmlns:n0="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd" 
     xmlns:prx="urn:sap.com:proxy:DV4:/1SAI/TAS1F59A417878D36573F1D:700:2013/05/24"> 
    <n0:contractorInfo> 
    <n0:contractorName>test_user</n0:contractorName> 
    <n0:contractorAddress> 
    <n0:street></n0:street> 
    <n0:city></n0:city> 
    <n0:state/> 
    <n0:zip/> 
    </n0:contractorAddress> 
</n0:contractorInfo> 
</n0:eCPR> 

私はデフォルトの名前空間を削除した場合、出力は私はそれが

<CPR:eCPR xmlns:CPR="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd"> 
<CPR:contractorInfo> 
    <CPR:contractorName>test_user</CPR:contractorName> 
    <CPR:contractorAddress> 
    <CPR:street>999 Carrier Rd</CPR:street> 
    <CPR:city>Oakland</CPR:city> 
    <CPR:state>CA</CPR:state> 
    <CPR:zip>94612</CPR:zip> 
    </CPR:contractorAddress> 
</CPR:contractorInfo> 
</CPR:eCPR> 

ようになりたい何この

<eCPR> 
    <contractorInfo> 
    <contractorName>test_user</contractorName> 
    <contractorAddress> 
    <street></street> 
    <city></city> 
    <state/> 
    <zip/> 
    </contractorAddress> 
    <insuranceNum></insuranceNum> 
    <contractorEmail></contractorEmail> 
</contractorInfo> 
</eCPR> 

のように見えますデフォルトの名前空間を削除するために使用したコードは次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/|comment()|processing-instruction()"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

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

<xsl:template match="@*"> 
    <xsl:attribute name="{local-name()}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

親切に、助けてください。あなたの入力には属性(またはコメントまたは処理命令を)持っていないことを、私はあなたが簡単に行うことができませんでしたない理由を見ない考える

おかげ

+1

あなたの質問は明確ではありません。実際のXML入力とは何ですか? –

+0

@ michael.hor257k私はXSDを読んで、各ノードの値を取得してXML出力を生成しています。初期出力には、SAPシステムと同様にsap://で始まる名前空間が含まれています。しかし、私は名前空間をCPRに更新したい(図のように)。私は既存の名前空間を削除しましたが、更新することはできません。私はデフォルト出力で更新しました –

答えて

2

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:CPR="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="*"> 
    <xsl:element name="CPR:{local-name()}"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 
+0

@ micheal.hor257k Perfect !!!感謝 –

関連する問題