XSLT 2.0バージョンのヘルプをお探しですか?ここでXSLT 2.0 - 値と属性によるフィルタリング
はXMLである:ここでは
<?xml version='1.0' encoding='UTF-8'?>
<peci:Workers_Effective_Stack xmlns:peci="urn:com.workday/peci">
<peci:Summary>
<peci:Version>1</peci:Version>
</peci:Summary>
<peci:Worker>
<peci:Worker_Summary>
</peci:Worker_Summary>
<peci:Effective_Change peci:Sequence="0">
<peci:Derived_Event_Code>LOA-C</peci:Derived_Event_Code>
<peci:Effective_Moment>2017-03-15T00:00:00.000-07:00</peci:Effective_Moment>
<peci:Entry_Moment>2017-03-14T05:42:16.106-07:00</peci:Entry_Moment>
<peci:Leave_of_Absence peci:isDeleted="1">
<peci:Leave_Start_Date>2017-03-15-07:00</peci:Leave_Start_Date>
<peci:Estimated_Leave_End_Date>2017-04-10-07:00</peci:Estimated_Leave_End_Date>
<peci:Leave_Last_Day_of_Work>2017-03-14-07:00</peci:Leave_Last_Day_of_Work>
<peci:Leave_of_Absence_Type>X_01</peci:Leave_of_Absence_Type>
</peci:Leave_of_Absence>
<peci:Leave_of_Absence peci:isAdded="1">
<peci:Leave_Start_Date>2017-03-15-07:00</peci:Leave_Start_Date>
<peci:Estimated_Leave_End_Date>2017-04-10-07:00</peci:Estimated_Leave_End_Date>
<peci:Leave_Last_Day_of_Work>2017-03-14-07:00</peci:Leave_Last_Day_of_Work>
<peci:Leave_of_Absence_Type>X_01</peci:Leave_of_Absence_Type>
</peci:Leave_of_Absence>
</peci:Effective_Change>
<peci:Effective_Change peci:Sequence="1">
<peci:Derived_Event_Code>RFL</peci:Derived_Event_Code>
<peci:Effective_Moment>2017-04-13T00:00:00.000-07:00</peci:Effective_Moment>
<peci:Entry_Moment>2017-03-14T05:42:16.106-07:00</peci:Entry_Moment>
<peci:Leave_of_Absence peci:isUpdated="1">
<peci:Leave_Start_Date>2017-03-15-07:00</peci:Leave_Start_Date>
<peci:Leave_End_Date peci:isAdded="1">2017-04-12-07:00</peci:Leave_End_Date>
<peci:Estimated_Leave_End_Date>2017-04-10-07:00</peci:Estimated_Leave_End_Date>
<peci:First_Day_of_Work peci:isAdded="1">2017-04-13-07:00</peci:First_Day_of_Work>
<peci:Leave_Last_Day_of_Work>2017-03-14-07:00</peci:Leave_Last_Day_of_Work>
<peci:Leave_of_Absence_Type>X_01</peci:Leave_of_Absence_Type>
</peci:Leave_of_Absence>
</peci:Effective_Change>
</peci:Worker>
</peci:Workers_Effective_Stack>
はXSLです:
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:this="urn:this-stylesheet"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:peci="urn:com.workday/peci"
>
<xsl:template match="/">
<File>
<xsl:apply-templates>
</xsl:apply-templates>
</File>
</xsl:template>
<xsl:template match="peci:Effective_Change">
<xsl:if test="peci:Leave_of_Absence">
<xsl:call-template name="TESTID" />
</xsl:if>
</xsl:template>
<xsl:template name="TESTID">
<xsl:apply-templates select="peci:Leave_of_Absence">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="peci:Leave_of_Absence">
<Record>
<Identification>
<xsl:text>TEST</xsl:text>
</Identification>
<Employee>
<xsl:value-of select="../peci:Worker_Summary/peci:Employee_ID" />
</Employee>
<Leave_Start_Date>
<xsl:value-of select="format-date(peci:Leave_Start_Date, '[D01][M01][Y0001]')" />
</Leave_Start_Date>
<Leave_End_Date>
<xsl:value-of select="if (exists(peci:Leave_End_Date)) then format-date(peci:Leave_End_Date, '[D01][M01][Y0001]') else format-date(peci:Estimated_Leave_End_Date, '[D01][M01][Y0001]')" />
</Leave_End_Date>
<xsl:choose>
<xsl:when test="contains(peci:Leave_of_Absence_Type,'_')">
<Absence_Code>
<xsl:value-of select="substring-after(peci:Leave_of_Absence_Type,'_')" />
</Absence_Code>
</xsl:when>
<xsl:otherwise>
<Absence_Code>
<xsl:value-of select="peci:Leave_of_Absence_Type" />
</Absence_Code>
</xsl:otherwise>
</xsl:choose>
<Duration>
<xsl:value-of select="if (exists(peci:Leave_End_Date)) then days-from-duration(xs:date(peci:Leave_End_Date)-xs:date(peci:Leave_Start_Date))+1 else days-from-duration(xs:date(peci:Estimated_Leave_End_Date)-xs:date(peci:Leave_Start_Date))+1" />
</Duration>
<xsl:choose>
<xsl:when test="./@peci:isAdded or ./@peci:isUpdated">
<Delete_Selection>
</Delete_Selection>
</xsl:when>
<xsl:otherwise>
<Delete_Selection>
<xsl:text>9</xsl:text>
</Delete_Selection>
</xsl:otherwise>
</xsl:choose>
</Record>
</xsl:template>
</xsl:stylesheet>
は出力:
<?xml version="1.0" encoding="UTF-8"?>
<File>
<Record>
<Identification>TEST</Identification>
<Employee/>
<Leave_Start_Date>15032017</Leave_Start_Date>
<Leave_End_Date>10042017</Leave_End_Date>
<Absence_Code>01</Absence_Code>
<Duration>27</Duration>
<Delete_Selection>9</Delete_Selection>
</Record>
<Record>
<Identification>TEST</Identification>
<Employee/>
<Leave_Start_Date>15032017</Leave_Start_Date>
<Leave_End_Date>10042017</Leave_End_Date>
<Absence_Code>01</Absence_Code>
<Duration>27</Duration>
<Delete_Selection/>
</Record>
<Record>
<Identification>TEST</Identification>
<Employee/>
<Leave_Start_Date>15032017</Leave_Start_Date>
<Leave_End_Date>12042017</Leave_End_Date>
<Absence_Code>01</Absence_Code>
<Duration>29</Duration>
<Delete_Selection/>
</Record>
</File>
私は、現在のテンプレート構造で、以下の出力を得るために探していますフィルター付きの私のxsl。出来ますか? Derived_Event_CodeがLOA-Cの場合、対応するpeci:Leave_of_Absenceを属性peci:isAddedで無視します。現在のxslテンプレート構造のどこにそのフィルタを導入するべきですか?
期待出力:追加する価値
<?xml version="1.0" encoding="UTF-8"?>
<File>
<Record>
<Identification>TEST</Identification>
<Employee/>
<Leave_Start_Date>15032017</Leave_Start_Date>
<Leave_End_Date>10042017</Leave_End_Date>
<Absence_Code>01</Absence_Code>
<Duration>27</Duration>
<Delete_Selection>9</Delete_Selection>
</Record>
<Record>
<Identification>TEST</Identification>
<Employee/>
<Leave_Start_Date>15032017</Leave_Start_Date>
<Leave_End_Date>12042017</Leave_End_Date>
<Absence_Code>01</Absence_Code>
<Duration>29</Duration>
<Delete_Selection/>
</Record>
</File>
特定の ' '要素を省略したいので、そのロジックの場所は、それらの要素を作成するテンプレート、つまり' peci:Leave_of_Absence'と一致する要素です。そのマッチ式に述語を追加して、出力に反映させたい入力要素だけを受け入れるようにする必要があります。 –