2017-07-14 10 views
0

なぜ私はタグからすべてを印刷しますか?私はちょうどそのノードに入るので、私は常にパスを入力する必要はありませんか?ここでは例のXMLは次のとおりです。ここでテンプレートマッチは一致タグからすべてを出力します

  <?xml version="1.0" encoding="UTF-8"?> 
<Document xmlns="blablabla" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <CstmrCdtTrfInitn> 
     <GrpHdr> 
     <MsgId>35006</MsgId> 
     <CreDtTm>2017-04-13T08:30:09</CreDtTm> 
     <NbOfTxs>3</NbOfTxs> 
     <CtrlSum>22000.00</CtrlSum> 
     <InitgPty> 
      <Nm>XXXXX</Nm> 
      <Id> 
       <OrgId> 
        <Othr> 
        <Id>0000010681</Id> 
        </Othr> 
       </OrgId> 
      </Id> 
     </InitgPty> 
     </GrpHdr> 
     <PmtInf> 
     <PmtInfId>35006_26011</PmtInfId> 
     <PmtMtd>TRF</PmtMtd> 
     <NbOfTxs>3</NbOfTxs> 
     <CtrlSum>22000.00</CtrlSum> 
     <PmtTpInf /> 
     <ReqdExctnDt>2017-04-13</ReqdExctnDt> 
     <Dbtr> 
      <Nm>WWWWWWW</Nm> 
      <PstlAdr> 
       <StrtNm>AAAAAA</StrtNm> 
       <PstCd>BBBBBB</PstCd> 
       <TwnNm>CCCCCC</TwnNm> 
       <Ctry>PL</Ctry> 
      </PstlAdr> 
      <Id> 
       <OrgId> 
        <Othr> 
        <Id>0000010681</Id> 
        </Othr> 
       </OrgId> 
      </Id> 
     </Dbtr> 
     </PmtInf> 
    </CstmrCdtTrfInitn> 
</Document> 

は、私が受信したいものです。

1. XXXXX 
2. AAAAAA 
3. BBBBBB 
4. CCCCCC 

そして私は取得しています:

350062017-04-13T08:30:09322000.00XXXXX0000010681 
    1. 
    WWWWWWW 
    2. 
    AAAAAA 
    3. 
    BBBBBB 
    4. 
    CCCCCC 

このXLSTを使用する:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:doc="blablabla" version="1.0"> 
    <xsl:output method="text" encoding="utf-8" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="doc:PmtInf"> 
     1. 
     <xsl:value-of select="doc:Dbtr/doc:Nm" /> 
     2. 
     <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:StrtNm" /> 
     3. 
     <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:PstCd" /> 
     4. 
     <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:TwnNm" /> 
    </xsl:template> 
</xsl:stylesheet> 

答えて

-1

変更

 <xsl:value-of select="doc:Dbtr/doc:Nm" /> 

 <xsl:value-of select="ancestor-or-self::Document/CstmrCdtTrfInitn/GrpHdr/InitgPty/Nm" /> 

に祖先-または自己あなたのXMLドキュメント

+0

必要があるあなたに結果を与える必要があります。 –

+0

彼は彼が望むことを達成する。しかし、私はその質問を誤解するかもしれません。 – Casper

+0

本当ですか?私はあなたのxpathが何かを選択するとは思わない。 (あなたはネームスペースを考慮していません) –

1

の最上位ノードから選択するpossebilityを与えるこれはbuilt-in template rulesでありますプロセッサがXSLTで一致するテンプレートを見つけることができない場合に使用されます

/によって表される)文書ノードに一致すると、あなたのXSLTでテンプレートマッチングを持っていないので、組み込みのテンプレートが

<xsl:template match="*|/"> 
    <xsl:apply-templates/> 
</xsl:template> 
を適用するテンプレートを探してXSLTによるXMLの処理が開始します

これは単にノードを渡し、子ノードに一致するテンプレートを探します。

CstmrCdtTrfInitnになると、一致するテンプレートもないため、組み込みテンプレートは引き続きその子を選択するために適用されます。 pmtInfに一致するテンプレートがありますが、GrpHdrには一致しません。つまり、これらの

<xsl:template match="text()|@*"> 
    <xsl:value-of select="."/> 
</xsl:template> 

にマッチしますGrpHdr要素、最終的には、組み込みのテンプレートはテキストノードに到達するであろう、のために、組み込みのテンプレートは、あなたが得る理由である、それが見つかったテキストノードを出力します余分なテキスト。あなたは何ができるか

は、それ以上の

<xsl:template match="doc:GrpHdr" /> 

を行くないようにGrpHdrと一致し、XSLTを伝えるテンプレートを追加したり、あなたは、あなたがしたいだけの子ノードを選択doc:CstmrCdtTrfInitnに一致するテンプレートを持っている可能性があります。

<xsl:template match="doc:CstmrCdtTrfInitn"> 
    <xsl:apply-templates select="doc:PmtInf" /> 
</xsl:template> 

あなたはすべての組み込みテンプレートに依存したくなかった、またはあなたがそれらをしたくない遊びに来ているあなたのXML内の他の要素を持っているならば、あなたもこれを追加してみてください可能性がある場合代わりにテンプレートを使用して、文書ノードと一致させ、次にPmtInfノードに接続します。逆に -

<xsl:template match="/"> 
    <xsl:apply-templates select="doc:Document/doc:CstmrCdtTrfInitn/doc:PmtInf" /> 
</xsl:template> 

は一例として、これはあなたがこの問題とは関係ありませんし、何も解決しません

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:doc="blablabla" version="1.0"> 
    <xsl:output method="text" encoding="utf-8" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match="doc:GrpHdr" /> 

    <xsl:template match="doc:PmtInf"> 
     1. <xsl:value-of select="doc:Dbtr/doc:Nm" /> 
     2. <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:StrtNm" /> 
     3. <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:PstCd" /> 
     4. <xsl:value-of select="doc:Dbtr/doc:PstlAdr/doc:TwnNm" /> 
    </xsl:template> 
</xsl:stylesheet> 
関連する問題