我有一個樣式表,我在其中回圈一個 Day-Element。對于每一天,我都需要從另一個 XML 檔案中獲取一個值,該檔案包含在一個引數中,由 $ArtStat 參考。
如果我使用過濾器作為 2022-10-11 的固定值,它作業正常
<xsl:for-each select="Day">
<QtyOut><xsl:value-of select="$ArtStat/ECRArtStat/Days/Day[Date='2022-10-11']/QtyOut" /></QtyOut>
</xsl:for-each>
但是我需要將過濾器用作動態值(當前節點的內容),這不起作用(在這種情況下,結果是這個選擇回傳一個空字串“”
<xsl:for-each select="Day">
<QtyOut><xsl:value-of select="$ArtStat/ECRArtStat/Days/Day[Date=current()]/QtyOut" /></QtyOut>
</xsl:for-each>
我用 current() 或 'current()' 嘗試過,用 .,用 self:node(),任何東西都不起作用我想有一個簡單的解決方案,但我找不到它。我可以將 XSLT 2.0 或 3.0 與 Saxon 9 一起使用
上面的解釋是對我的問題的簡化。因為實際上我需要的是:對于我的 XML 檔案的每一天,我需要檢查另一個檔案中的 QtyOut 值,并且我需要將它們相加為一個值。所以是這樣的:
sum($ArtStat/ECRArtStat/Days/Day[Date=<Nodeset of the days>]/QtyOut)
但是這個我不能直接用 XSL 解決,所以我嘗試先設定一個變數,然后對內容求和,如下所示:
<xsl:variable name="QtyOutList">
<xsl:for-each select="Day">
<QtyOut><xsl:value-of select="$ArtStat/ECRArtStat/Days/Day[Date=current()]/QtyOut" /></QtyOut>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum($QtyOutList/QtyOut)" />
如果我使用固定的日期值,這確實有效,但不是 current(),....
源 XML(源檔案定義我們需要獲取值的日期):
<Columns>
<Column type="pastWeek">
<WeekNo>40</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-03</StartDay>
</Column>
<Column type="currentWeek">
<WeekNo>41</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-10</StartDay>
<Day>2022-10-10</Day>
<Day>2022-10-11</Day>
<Day>2022-10-12</Day>
<Day>2022-10-13</Day>
<Day>2022-10-14</Day>
<Day>2022-10-15</Day>
</Column>
</Columns>
將 XML 參考為變數(我需要從中獲取 QtyOut 值):
<ECRArtStat>
<Days>
<Day>
<Date>2022-10-13</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-12</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-11</Date>
<QtyIn>0</QtyIn>
<QtyOut>5</QtyOut>
</Day>
<Day>
<Date>2022-10-10</Date>
<QtyIn>0</QtyIn>
<QtyOut>4</QtyOut>
</Day>
uj5u.com熱心網友回復:
如果我這樣做
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
expand-text="yes"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Column[Day]">
<xsl:comment>Sum {sum($ArtStat/ECRArtStat/Days/Day[Date = current()/Day]/QtyOut)}</xsl:comment>
<xsl:next-match/>
</xsl:template>
<xsl:param name="ArtStat">
<ECRArtStat>
<Days>
<Day>
<Date>2022-10-13</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-12</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-11</Date>
<QtyIn>0</QtyIn>
<QtyOut>5</QtyOut>
</Day>
<Day>
<Date>2022-10-10</Date>
<QtyIn>0</QtyIn>
<QtyOut>4</QtyOut>
</Day>
</Days>
</ECRArtStat>
</xsl:param>
</xsl:stylesheet>
針對例如的輸入
<Columns>
<Column type="pastWeek">
<WeekNo>40</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-03</StartDay>
</Column>
<Column type="currentWeek">
<WeekNo>41</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-10</StartDay>
<Day>2022-10-10</Day>
<Day>2022-10-11</Day>
<Day>2022-10-12</Day>
<Day>2022-10-13</Day>
<Day>2022-10-14</Day>
<Day>2022-10-15</Day>
</Column>
</Columns>
結果是例如
<?xml version="1.0" encoding="UTF-8"?><Columns>
<Column type="pastWeek">
<WeekNo>40</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-03</StartDay>
</Column>
<!--Sum 9--><Column type="currentWeek">
<WeekNo>41</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-10</StartDay>
<Day>2022-10-10</Day>
<Day>2022-10-11</Day>
<Day>2022-10-12</Day>
<Day>2022-10-13</Day>
<Day>2022-10-14</Day>
<Day>2022-10-15</Day>
</Column>
</Columns>
意思是總和是根據參考值計算的。
當您假裝詢問有關 XSLT 3 的問題但不了解文本值模板的使用時xsl:next-match,這里是一個使用的示例xsl:value-of:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Column[Day]">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<Sum>
<xsl:value-of select="sum($ArtStat/ECRArtStat/Days/Day[Date = current()/Day]/QtyOut)"/>
</Sum>
</xsl:copy>
</xsl:template>
<xsl:param name="ArtStat">
<ECRArtStat>
<Days>
<Day>
<Date>2022-10-13</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-12</Date>
<QtyIn>0</QtyIn>
<QtyOut>0</QtyOut>
</Day>
<Day>
<Date>2022-10-11</Date>
<QtyIn>0</QtyIn>
<QtyOut>5</QtyOut>
</Day>
<Day>
<Date>2022-10-10</Date>
<QtyIn>0</QtyIn>
<QtyOut>4</QtyOut>
</Day>
</Days>
</ECRArtStat>
</xsl:param>
</xsl:stylesheet>
輸出例如
<Columns>
<Column type="pastWeek">
<WeekNo>40</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-03</StartDay>
</Column>
<Column type="currentWeek">
<WeekNo>41</WeekNo>
<Year>2022</Year>
<StartDay>2022-10-10</StartDay>
<Day>2022-10-10</Day>
<Day>2022-10-11</Day>
<Day>2022-10-12</Day>
<Day>2022-10-13</Day>
<Day>2022-10-14</Day>
<Day>2022-10-15</Day>
<Sum>9</Sum></Column>
</Columns>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515920.html
上一篇:使用R根據其他因素更改雕像
