2017-01-29 82 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