【问题标题】:XSLT count nodes by pattern and contentXSLT 按模式和内容计算节点
【发布时间】:2015-03-16 10:28:44
【问题描述】:

我的数据看起来像这些样本:

样本 1:

<?xml version="1.0" encoding="UTF-8" ?>
<MYDATA type="store">
    <STORE_ID lang="en">44</STORE_ID>
    <!-- Many other elements here -->
    <MON lang="en">C</MON>
    <TUE lang="en">C</TUE>
    <WED lang="en">C</WED>
    <THU lang="en">C</THU>
    <FRI lang="en">C</FRI>
    <SAT lang="en">C</SAT>
    <SUN lang="en">C</SUN>
</MYDATA>

示例 2:

<?xml version="1.0" encoding="UTF-8" ?>
<MYDATA type="store">
    <STORE_ID lang="en">48</STORE_ID>
    <!-- Many other elements here -->
    <MON lang="en">O</MON>
    <TUE lang="en">O</TUE>
    <WED lang="en">O</WED>
    <THU lang="en">O</THU>
    <FRI lang="en">O</FRI>
    <SAT lang="en">O</SAT>
    <SUN lang="en">C</SUN>
</MYDATA>

我有一个 XSL 样式表来将该 XML 转换为另一个。

我想在某个地方添加一个元素,当且仅当在任何一天(周一到周日)中至少有一个“O”。 (样品1不能通过测试,样品2必须通过测试)

我试过这段代码:

<xsl:if test="count(matches(node-name(), '(MON)(TUE)(WED)(THU)(FRI)(SAT)(SUN)')[text()='O'])>0">
    <OpeningHours id='boutique'>
        <xsl:call-template name="descriptionTemplate" />
        <xsl:call-template name="scheduleTemplate" />
    </OpeningHours>
</xsl:if>

但是这个语法不被接受(错误:Failed to compile stylesheet

我正在寻找 XSLT 1.0 或 XSLT 2.0 中更简单的解决方案。

【问题讨论】:

    标签: regex xml xslt if-statement


    【解决方案1】:

    使用

    <xsl:template match="MYDATA">
      <xsl:if test="(MON | TUE | WED | THU | FRI | SAT | SUN)[. = 'O']">...</xsl:if>
    </xsl:template>
    

    当然,根据您的需要,将条件放入谓词甚至可能是更好的解决方案:

    <xsl:template match="MYDATA[(MON | TUE | WED | THU | FRI | SAT | SUN)[. = 'O']]">...</xsl:template>
    

    【讨论】:

    • 谢谢...我不知道为什么我如此关注功能...非常简短。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多