2017-01-05 26 views
0

私はXSLTの新機能です。私はこのようなXMLを作成する必要があります。XSLTを使用したXMLのマルチレベルおよび複数のネームスペース

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
     <s:Body> 
     <GetRecordResponse xmlns="urn:RedIron.RetailRepository.Services.SearchService"> 
      <GetRecordResult xmlns:a="urn:RedIron.RetailRepository.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

私はこのlavelまでxmlを生成することができます。しかし、複数のlavel名前空間が使用されているので、私は混乱します。

<?xml version="1.0" encoding="UTF-8"?> 
     <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
      <s:Body> 
       <GetRecordResponse xmlns="urn:RedIron.RetailRepository.Services.SearchService"/> 
      </s:Body> 
     </s:Envelope> 

私はあなたがこれらの名前空間ノードを追加したい場合は、あなたがxsl:namespaceを使用することができ、同じ

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" 
     version="2.0"> 
    <xsl:output indent="yes"/> 
    <xsl:template match = "/" > 
     <s:Envelope > 
      <s:Body> 
      <xsl:element name = "GetRecordResponse" namespace = "urn:RedIron.RetailRepository.Services.SearchService" > 
      </xsl:element> 
      </s:Body> 
      </s:Envelope>    
     </xsl:template> 
    </xsl:stylesheet> 

答えて

0

ために、このXSLTを使用しています。これはXSLT2.0をサポートするプロセッサでのみ利用可能です。

<xsl:element name="GetRecordResponse" namespace="urn:RedIron.RetailRepository.Services.SearchService"> 
    <xsl:element name="GetRecordResult" namespace="urn:RedIron.RetailRepository.Services.SearchService"> 
     <xsl:namespace name="a" select="'urn:RedIron.RetailRepository.Core'" /> 
     <xsl:namespace name="i" select="'http://www.w3.org/2001/XMLSchema-instance'" /> 
    </xsl:element> 
</xsl:element> 

また、あなたはおそらく要素名とそこに名前空間宣言を書き出すことができます文字通り

<GetRecordResponse xmlns="urn:RedIron.RetailRepository.Services.SearchService" > 
    <GetRecordResult xmlns:a="urn:RedIron.RetailRepository.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" /> 
</GetRecordResponse> 

あなたが別のテンプレートにGetRecordResultの作成を移動した場合、たとえば、あなたが必要な場合がありますそれはもはやGetRecordResponse

<GetRecordResult xmlns="urn:RedIron.RetailRepository.Services.SearchService" 
    xmlns:a="urn:RedIron.RetailRepository.Core" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" /> 
+0

からデフォルトnamespceを継承しないように、それにデフォルトの名前空間を指定する最初のオプションは、それが与える動作しません。 GetRecordResultで空白の要素。 2番目の選択肢を使用して、空のxmlns = ""を取得します。このように sagar

+0

アクションはhttp://xsltransform.net/bFWR5Erとして動作します。最初のオプションは、XSLT 1.0では 'xsl:namespace'が利用できないため、XSLT 2.0プロセッサが動作することが必要です。コードを別のテンプレートに移動し、 "GetRecordResponse"からデフォルトの名前空間を継承しない限り、2番目のオプションはxmlns = ""になりません。私の答えに編集を参照してください。 –

+0

ありがとうTim。完璧に動作します。私はxsltについてもっと学ぶ必要があると思う。私に何かお勧めしますか? – sagar

関連する問題