2017-01-29 11 views
0

XMLファイルが添付されており、属性値が何かのノードだけをコピーしたいと思います。私の場合はAHC_です。各ノードにおいて、属性は 'AHC_'で始まる値を有し、そのノードをコピーし、他のノードは無視する。属性値(検索のような)に基づくXSLコピーノード

私はXSLに従って動作していますが、状態は正常ですが、ノードをコピーしていません。どうぞご覧ください。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output encoding="UTF-8" indent="yes" method="xml"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="Schedules"> 
     <xsl:if test="Schedule[@ServiceName='MESAVisToolkit_RetentionProcessor']"> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:if> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

サンプルXML:

<?xml version="1.0" encoding="UTF-8"?> 
<Schedules> 
    <Schedule OrganizationKey=" " ScheduleID="13" ServiceName="RetentionProcessor"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <time>0200</time> 
        </times> 
       </day> 
      </days> 
      <excludedDates/> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="14" ServiceName="MESAVisToolkit_RetentionProcessor"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <time>0300</time> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="15" ServiceName="MailboxEvaluateAllAutomaticRules"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>1</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
      <excludedDates/> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="16" ServiceName="MailboxEvaluateAllAutomaticRulesSubMin"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>1</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="51" ServiceName="AHC_001_01_0100_Get_Schedule"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>5</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="54" ServiceName="AHC_001_01_0200_Get_Schedule"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>5</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
</Schedules> 

予想される出力:

<?xml version="1.0" encoding="UTF-8"?> 
    <Schedule OrganizationKey=" " ScheduleID="51" ServiceName="AHC_001_01_0100_Get_Schedule"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>5</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
    <Schedule OrganizationKey=" " ScheduleID="54" ServiceName="AHC_001_01_0200_Get_Schedule"> 
     <TimingXML> 
      <days> 
       <day ofWeek="-1"> 
        <times> 
         <timeRange> 
          <range>0000-2359</range> 
          <interval>5</interval> 
          <onMinute>0</onMinute> 
         </timeRange> 
        </times> 
       </day> 
      </days> 
     </TimingXML> 
    </Schedule> 
</Schedules> 

答えて

0

条件は作業が、ノードをコピーされていません。

これは正しくありません。すべてScheduleノードが条件なしでコピーされます。あなたの状態が理にかなっていないからです。任意の属性は、その ノード

さらに重要な「AHC_」コピーで始まる値を持つ各ノードで

、それを:それはあなたが欲しい言ったことには何の関係もありませんので、それは意味がありませんそれは親Schedules要素の文脈から評価され、個々のScheduleノードではないので、意味をなさない。したがって、Scheduleの子が条件を満たす場合は、すべてのテンプレートを適用します(つまりコピーします)。今働いて

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

<xsl:template match="/Schedules"> 
    <xsl:copy> 
     <xsl:copy-of select="Schedule[--your condition goes here---]"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

その:

を選択いくつかの条件を満足するだけScheduleの要素をコピーするには、として、あなたのスタイルシートを構造化する必要があります。どうもありがとうございました。 – GSR

関連する問題