2017-03-07 3 views
0

をコーディングXSLTでヘルプが必要:は、以下のクエリで私を助けて、私はXSLT .Kindlyに新しいです

マイソースXML:

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:Header1 xmlns:ns1="urn:src:abc"> 
<Header2> 
<Header3> 
<field1>1.1.2017</field1> 
<field2>12</field2> 
<field3> </field3> 
</Header3> 
</Header2> 
</ns1:Header1> 

目標/期待されるXML

<?xml version="1.0" encoding="UTF-8"?> 
<ns2:Header1 xmlns:ns2="urn:tar:abc" xmlns:v1="def.v1"> 
<Header2> 
<v1:Header3> 
<field1>1.1.2017</field1> 
<field2>12</field2> 
<field3> </field3> 
</v1:Header3> 
</Header2> 
</ns2:Header1> 

また、私はフィールドfiled3の間の空白/空白を削除する必要があります(Field3の値は空白になることがあります)

私は私のターゲットXMLを達成することはできませんよ変容

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="xs" version="2.0"> 
<xsl:template match="*"> 
<ns2:Header1 xmlns:ns2="urn:tar:abc" xmlns:v1="def.v1"> 
<Header2> 
<xsl:copy-of select="//Header3"/> 
</Header2> 
</ns2:Header1> 
</xsl:template> 
</xsl:stylesheet> 

については、以下のコードを使用しています。親切に事前に 感謝 よろしくを助け、 PAVI

答えて

0

あなたの現在のテンプレートには、任意の要素にマッチします*と一致しますが、本当にあなたは、それがルート要素と一致します。あなたはその後、必要があるだろう

さらに

、あなたは「def.v1」名前空間であることに、ない名前空間であることからHeader3を変更したいと、あなたがxsl:apply-templatesを利用してしなければならない、ないxsl:copy-of

<xsl:template match="/*"> 
    <ns2:Header1 xmlns:ns2="urn:tar:abc" xmlns:v1="def.v1"> 
     <xsl:apply-templates /> 
    </ns2:Header1> 
</xsl:template> 

名前空間に

<xsl:template match="Header3" xmlns:v1="def.v1"> 
    <v1:Header3> 
     <xsl:apply-templates /> 
    </v1:Header3> 
</xsl:template> 

を変更するHeader3テンプレートマッチングはその後、ちょうど変更することなく、他のすべてのノードをコピーするにはアイデンティティーテンプレートが必要になります。

http://xsltransform.net/jz1PuQb

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" version="2.0"> 

    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="/*"> 
     <ns2:Header1 xmlns:ns2="urn:tar:abc" xmlns:v1="def.v1"> 
      <xsl:apply-templates /> 
     </ns2:Header1> 
    </xsl:template> 

    <xsl:template match="Header3" xmlns:v1="def.v1"> 
     <v1:Header3> 
      <xsl:apply-templates /> 
     </v1:Header3> 
    </xsl:template> 

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

が行動でそれを参照してください、このXSLTをお試しください

関連する問題