2017-10-27 12 views
0

XMLファイルの最初の行は、InitgPty内の子ノードを持つIdノードを削除したいだけです。私は、このXSLTを試みたが、運と多くを読んだ後XSLTが動作しないXMLノードを削除する

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <CstmrCdtTrfInitn> 
    <GrpHdr> 
     <MsgId>0001</MsgId> 
     <CreDtTm>2017-10-27T07:00:53</CreDtTm> 
     <NbOfTxs>1</NbOfTxs> 
     <CtrlSum>84562.00</CtrlSum> 
     <InitgPty> 
     <Nm>ABC Co</Nm> 
     <Id> 
      <OrgId /> 
     </Id> 
     </InitgPty> 
    </GrpHdr> 

:私は結果を達成するためにあなたの助けが必要

<xsl:template match="InitgPty/Id"/> 

<xsl:stylesheet 
version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd" 
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd pain.001.001.03.ch.02.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes" indent="yes"/> 

<xsl:strip-space elements="*"/> 


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



<xsl:template match="/*"> 
    <Document xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd pain.001.001.03.ch.02.xsd"> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </Document > 
</xsl:template> 

    <xsl:template match="InitgPty/Id"/> 


</xsl:stylesheet> 

私は、以下の行を追加しました。

答えて

1

属性を一致させることができるので、これをアーカイブする方が簡単です。

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

コメントをコピーしたい場合は、あまりにも使用します。

<xsl:template match="processing-instruction()"> 
    <xsl:copy/> 
</xsl:template> 

編集:上位のコードが動作しない場合は、この方法を試してください。

<xsl:template match="@*|node()"> 
    <xsl:choose> 
     <xsl:when test="local-name() = 'Id' and parent::node()[local-name() = 'InitgPty']"/> 
     <xsl:otherwise> 
      <xsl:copy> 
       <xsl:apply-templates/> 
      </xsl:copy> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+0

私の提案はうまくいかなかったのですか?私は私の行を削除し、あなたのを追加しました – HichemSeeSharp

+0

奇妙な。あなたのノードはまさにその名前を持っており、あなたはその文書をまだ変更していないと確信していますか? アーカイブする別の方法として、次のようになります。 \tます。 \t \t \t \t \tます。 \t \t \t \t \t \t \t \t \t \t \t \tます。 \t \t \t \t \t \t \t \t \t \t

+0

この1つは動作します!私は答えとしてマークすることができるようにあなたの答えを更新してください。ありがとうございました。 – HichemSeeSharp

0

@christianの答えが正しいと思われます私には、それが動作しない場合、明示的な接頭辞を使用して試してください。たとえば、

<xsl template match="ns:InitgPty/ns:Id" xmlns:ns='urn:iso:std:iso:20022:tech:xsd:pain.001.001.0'/> 
+0

どちらの提案もうまくいきませんでした!理由は何でしょうか? – HichemSeeSharp

関連する問題