XSL:IF 内 XSL:for-each-group

Posted

技术标签:

【中文标题】XSL:IF 内 XSL:for-each-group【英文标题】:XSL:IF within XSL:for-each-group 【发布时间】:2012-10-22 15:46:41 【问题描述】:

在我的 XSLT 中,我有类似的东西:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>

<xsl:template match="PhyscianTotals" name="PhyscianTotals">
<xsl:for-each select="PhysicianTotals">
    <xsl:for-each-group select="Statistic" group-by="Type">
        <xsl:if test="Title='PHYSICIAN DETAIL TOTAL'">
            <xsl:element name="totals">
    </xsl:element>
     </xsl:if>
</xsl:for-each-group>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

这是有效的 XSLT 吗?具体来说,“xsl:if 在 xsl:for-each-group 内”部分。我们调用的 XSLT 编译工具之一总是报错:在样式表的这个位置不允许使用 xsl:if。如果我删除 xsl:for-each-group,它就会通过。我不确定是我的 xslt 有错误还是编译工具的问题。


原来我们的工具只支持 XSLT 1.0。所以我想我回来只使用 1.0 标签重写 XSLT。

原始 XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<PhysicianTotals>
    <Statistic>
      <Title>PHYSICIAN TOTAL</Title>
      <Type>Type 1</Type>
      <Key>Cases</Key>
      <Value>1</Value>
    </Statistic>
    <Statistic>
      <Title>PHYSICIAN TOTAL</Title>
      <Type>Type 1</Type>
      <Key>Percentage</Key>
      <Value>25.0%</Value>
    </Statistic>
    <Statistic>
      <Title>PHYSICIAN TOTAL</Title>
      <Type>Type 2</Type>
      <Key>Cases</Key>
      <Value>3</Value>
    </Statistic>
    <Statistic>
      <Title>PHYSICIAN TOTAL</Title>
      <Type>Type 1</Type>
      <Key>Percentage</Key>
      <Value>75.0%</Value>
    </Statistic>
</PhysicianTotals>

输出将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<totals>
<type>PHY_DETAIL</type>
<detailInfo>
    <code>Type 1</code>
</detailInfo>
<count>
    <caseValue>1</caseValue>
    <percentValue>25.0%</percentValue>
</count>
</totals>
<totals>
    <type>PHY_DETAIL</type>
<detailInfo>
    <code>Type 2</code>
</detailInfo>
<count>
    <caseValue>3</caseValue>
    <percentValue>75.0%</percentValue>
</count>
</totals>

【问题讨论】:

【参考方案1】:
enchttp://***.com/editing-helpoding="UTF-8"

这是语法/词汇上非法的名称:enchttp://***.com/editing-helpoding

你是说encoding吗?

除此之外没有其他词法/语法错误,而且转换似乎有许多逻辑问题,可能不会产生想要的结果——但我不能 100 % 确定没有看到源 XML 文档和所需的结果。

【讨论】:

【参考方案2】:

除了 xsl:output 声明中的复制/粘贴错误之外,您的代码在我看来完全没问题。有点怀疑 - 你真的有一个名为 PhysicianTotals 的元素和一个名为 PhysicianTotals 的子元素 - 所以我怀疑你没有向我们展示实际生成错误的代码。

另一种可能是产生错误的工具是 XSLT 1.0 处理器。

【讨论】:

感谢您的回复。这是一个复制/粘贴错误。无论如何,结果我们使用的工具只支持 XSLT 1.0:(

以上是关于XSL:IF 内 XSL:for-each-group的主要内容,如果未能解决你的问题,请参考以下文章

如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串

如何创建布尔值?

将 XSLT 中的新类添加到现有的 div 标签类?

选择字段元素时不确定 XSLT 文档中的当前路径

如何在 XSLT 表中显示正确的内容

如何创建条件语句来对这些数据进行排序并在找到数据时应用模板?