首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在xslt中选择具有某种约定的数据。

在xslt中选择具有某种约定的数据。
EN

Stack Overflow用户
提问于 2011-06-10 09:20:11
回答 1查看 80关注 0票数 0

我的数据如下:

代码语言:javascript
代码运行次数:0
运行
复制
<Source>

<input>
    <plant>
        YYYYY
    </plant>
    <group>
        Georgia Power Co
    </group>
    <unit>
        Wilmot IC 5
    </unit>
    <Status>
        Operating
    </Status>
    <code>
        56504
    </code>
    <change>
        2
    </change>
</input>

<input>
    <plant>
        XXXXX
    </plant>
    <group>
        Detroit Edison Co
    </group>
    <unit>
        Wilmot IC 5
    </unit>
    <Status>
        Operating
    </Status>
    <code>
        56504
    </code>
    <change>
        0
    </change>
</input>

<input>
    <plant>
        ZZZZZZ
    </plant>
    <group>
        Detroit Edison Co
    </group>
    <unit>
        Wilmot IC 4
    </unit>
    <Status>
        Operating
    </Status>
    <code>
        56504
    </code>
    <change>
        2
    </change>
</input>

</Source>

我希望根据以下条件选择输入节点数据:

  1. <change>为2的输入数据应该比较具有<change>为0的<units>
  2. 如果两个记录中的单元匹配,我应该比较两个节点中的其他值。
  3. 如果对值有任何更改,我需要对它们加粗体。在输出数据中,
  4. 不应该有更改为0的集合。这意味着它应该只显示输入,即2.

EN

回答 1

Stack Overflow用户

发布于 2012-02-14 13:04:16

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="input">
    <xsl:variable name="other" select="../input[change=0 and unit=current()/unit]"/>

    <xsl:if test="$other">
      <match>
        <unit>
          <xsl:value-of select="unit"/>
        </unit>
        <xsl:for-each select="*[name() != 'change']">
          <xsl:variable name="name" select="name()"/>
          <xsl:variable name="original" select="$other/*[name() = $name]"/>
          <xsl:if test="not(current() = $original)">
            <value>
              <xsl:attribute name="name">
                <xsl:value-of select="$name"/>
              </xsl:attribute>
              <two>
                <xsl:value-of select="current()"/>
              </two>
              <zero>
                <xsl:value-of select="$original"/>
              </zero>
             </value>
            </xsl:if>
        </xsl:for-each>
      </match>
    </xsl:if>
  </xsl:template>

  <xsl:template match="/Source">
    <xsl:apply-templates select="input[change=2]"/>
  </xsl:template>
</xsl:stylesheet>

返回

代码语言:javascript
代码运行次数:0
运行
复制
<match>
    <unit>
        Wilmot IC 5
    </unit>
    <value name="plant">
        <two>
            YYYYY
        </two>
        <zero>
            XXXXX
        </zero>
    </value>
    <value name="group">
        <two>
            Georgia Power Co
        </two>
        <zero>
            Detroit Edison Co
        </zero>
    </value>
</match>

这似乎是你要找的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6304366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档