首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if条件XSLT中查找特定节点

在if条件XSLT中查找特定节点
EN

Stack Overflow用户
提问于 2018-06-29 12:43:09
回答 1查看 77关注 0票数 0

嗨,我的代码中有一个if条件有问题。准确地说,这里是XML文件:

代码语言:javascript
复制
<root name="fristLevel">
    <test name="secondaryLevel_1">
        <medium>
            <scribe>
                <cloude>
                    something is here
                </cloude>
            </scribe>
            <demo>
                something is here
            </demo>
        </medium>
    </test>
    <test name="secondaryLevel_2">
        <medium>
            <demo>
                something is here
            </demo>
        </medium>
    </test>
</root>

我正在寻找的是一个IF条件,如果medium有一个子节点,它会执行如下操作:

代码语言:javascript
复制
<xsl:for-each select="root/test">
    <xsl:if test="medium/scribe/node()">
        <!-- something here  -->
    </xsl:if>
</xsl:for-each>

但这对我不起作用。还有其他更好的主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 05:20:44

您的想法看起来不错,但可能您没有将这些代码放在适当的位置。

即使您的代码被放置在与整个文档/匹配的模板中,输出也不会是格式良好的XML,因为XML文档必须在主(根)级别包含一个单个节点。

所以很可能:

  • 脚本应该包含一个与root (主节点)匹配的模板。
  • 应该复制主节点的标记(<xsl:copy>),否则输出将没有任何单个主节点。
  • 最后,在这个( <xsl:copy></xsl:copy>标记之间)中,应该放置<xsl:for-each循环。
  • 脚本还应该包括标识模板。

如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:template match="root">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:for-each select="test">
        <xsl:copy>
          <xsl:apply-templates select="@*"/>
          <xsl:if test="medium/scribe/node()">
            <HasScribe><xsl:value-of select="medium/scribe"/></HasScribe>
          </xsl:if>
        </xsl:copy>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  </xsl:template>
</xsl:transform>

正如您所看到的,我还为属性添加了xsl:apply-templates,以便在输出中可以看到源元素是从哪个源元素生成的特定输出元素。

有关一个工作示例(稍微修改XML ),请参见http://xsltransform.net/ei5Pwjn

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

https://stackoverflow.com/questions/51102060

复制
相关文章

相似问题

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