XSLT if - 属性等于字符串

2024-06-24

我正在使用一个xsl:if在较大的条件下执行较小的条件xsl:template块,我想测试当前属性的相等性xsl:template匹配的节点。

以下内容不起作用:

<xsl:template match="sometag[@type='sometype']">
    ==Sometag==
    <xsl:if test="@something!='hidden'">something</xsl:if>
    <!--a lot of other stuff that I don't want to duplicate by multiplying the xsl:templates-->
<xsl:template>

这个测试似乎总是评估为 false,也许我没有好的语法?

这个XML:

<sometag type="sometype" something="visible"/>
<sometag type="sometype" something="hidden"/>
<sometag type="sometype"/>

应该给

==Sometag==
something...
==Sometag==
==Sometag==
something...

第二个标签不应打印“某物”部分。

我不完全确定你想要实现什么,但我会尝试一下。

你的其中一位sometag元素没有something根本没有属性。没有这个属性与@something!='hidden'。因此,如果something属性不存在。

因此你需要测试是否有is a something属性在你之前xsl:if条件被评估。

Input

<?xml version="1.0" encoding="utf-8"?>
<root>
<sometag type="sometype" something="visible"/>
<sometag type="sometype" something="hidden"/>
<sometag type="sometype"/>
</root>

样式表

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="text"/>
   <xsl:strip-space elements="*"/>

   <xsl:template match="/root">
      <xsl:apply-templates/>
   </xsl:template>

   <xsl:template match="sometag[@type='sometype']">
      <xsl:text>==Sometag==</xsl:text>
      <xsl:choose>
         <xsl:when test="@something">
            <xsl:if test="@something!='hidden'">
               <xsl:text>something</xsl:text>
            </xsl:if>
         </xsl:when>
         <xsl:otherwise>
            <xsl:text>something</xsl:text>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>

</xsl:stylesheet>

EDIT@Tim C 建议了一个更短的版本:

 <xsl:template match="sometag[@type='sometype']">
    <xsl:text>==Sometag==</xsl:text>
    <xsl:if test="@something!='hidden' or not(@something)">
       <xsl:text>something</xsl:text>
    </xsl:if>
 </xsl:template>

Output

==Sometag==something==Sometag====Sometag==something
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT if - 属性等于字符串 的相关文章

随机推荐

  • 如何使Emacs C源目录永久化?

    我是 Emacs 新手 刚刚学习如何使用它 我知道如何设置 Emacs C Source dir 但我不知道如何使此更改永久生效 我想我必须在 emacs 文件中设置它 但我不知道它的命令是什么 有人可以帮忙吗 通常 大多数用户可设置的变量
  • GoogleVis 图表未在 Rmarkdown 中呈现

    在 Rmarkdown 之外 独立的 googleVis 图表工作正常 但是当我将其插入 Rmarkdown 文件时 我只收到 Rmarkdown 代码 查看器输出 gt TEST H 4 13 2016 require googleVis
  • 设置捆绑包中组的标题页脚

    How can I leave a message under group type in Setting bundle something like this 它记录在这里 https developer apple com librar
  • Google Visualization 无法与 appscript html 服务配合使用

    我想将 appscript htmlservice 与 appscript 一起使用 html 服务似乎可以工作 但可视化不起作用 这是供参考的代码 代码 GS Script as app template function doGet r
  • readdir() 是否保证顺序?

    我正在使用 opendir readdir 获取类 linux 系统上的文件列表 看起来目录条目是按文件名的字母顺序返回的 但是 我在手册页中没有看到任何有关此顺序的保证 谁能告诉我 readdir 是否保证订单 The readdir方法
  • Ajax GET 请求:使用参数还是将数据放入 URL?

    在 Ajax GET 请求中将数据作为参数传递与作为 URL 的一部分传递相比有何优势 使用参数 var ajax new Ajax Request server php parameters store 11200 product Mea
  • SQL Server 2008-获取表约束

    你能帮我构建一个查询 检索所有表中的约束 每个表中的约束计数 并显示NULL对于没有任何约束的表 这是我到目前为止所拥有的 Select SysObjects Name As Constraint Name Tab Name as Tabl
  • 使用 arduino 客户端/python 服务器通过以太网转储数据

    我正在使用 arduino 以太网从传感器读取数据 然后想将数据发送到另一栋建筑物中的计算机以驱动 python 软件中的逻辑 控制 我决定在 python arduino 中绘制一个简单的草图 仅通过以太网将文本从 arduino 发送到
  • android studio 没有从 2.3 版本更新到 3.0 版本

    我正在尝试将我的 android studio 2 3 升级到 3 0 Linux 用户 我无意中按下了 忽略此更新 消息 然后我用谷歌搜索并找到了这个solution https stackoverflow com a 23636941
  • Firebase (FCM) 注册令牌

    我是 FCM 的新人 以下是有关注册令牌的一些问题 注册令牌是由 FCM 连接服务器生成的吗 Does the token change periodically in the connection server When 会不会强制onT
  • 如何在不知道谁呈现 UIActionSheets 和 UIPopoverControllers 的情况下关闭它们

    在我的客户端应用程序中 我有一个空闲超时控制机制 当用户在指定的时间间隔内没有对应用程序执行任何操作时 我会显示一条警告并将其返回登录屏幕 此控件发生在我的容器视图中 我在其中启动所有其他视图 当空闲时间结束时 我将此容器视图弹出给其调用者
  • Java SecurityException:签名者信息不匹配

    我像往常一样重新编译我的类 突然收到以下错误消息 为什么 我该如何修复它 java lang SecurityException class Chinese English Dictionary s signer information d
  • 如何在 Vega Lite 中将图例底部中间对齐?

    在 Vega Lite 中 我试图将我的图例与该图表的中间对齐 我需要类似的东西anchor图例的参数 但我只能找到titleAnchor 带图例的图表 https i stack imgur com ETiFs png legend ti
  • 绘制圆圈(使用 for 循环在图像中应用的像素)

    我想使用像素位置 从左上角开始到右下角结束 绘制一个圆 带有 1 或 2 个 for 循环 我用这个方法成功绘制了一个矩形 private void drawrect int width int height int x int y int
  • 聚合两个数组中的 $sum 值

    我有这个合集 id ObjectId 54f46f18c36dcc206d0cec38 project 23123 title Change of windows description Change to better windows o
  • 将数据从 DLL 传递到应用程序时出现问题

    我对如何在我的场景中正确使用指针感到有点困惑 我有一个 DLL 其中包含一些嵌入式资源 我在此 DLL 中公开了一个函数 该函数将这些资源之一的二进制数据传递回其调用应用程序 在本例中 我嵌入了 JPG 图像文件 我的 DLL 确实将文件正
  • C++ 运算符情况下的 const 转换

    考虑以下代码 struct A void operator const void operator const A int main const A ca ca g Error as expected ambiguous overload
  • 我可以在一行中从 DBNull 转换为 Nullable Bool 吗?

    我有一个数据库查询 它将返回NULL或布尔 位 值 我希望将此值存储在类型变量中Nullable
  • JSF 支持 bean 应该是可序列化的?

    我收到这些消息 2010 07 30T11 28 32 723 0000 警告 glassfish3 0 1 javax faces ThreadID 37 ThreadName Thread 1 设置 不可序列化的属性值 ViewMap
  • XSLT if - 属性等于字符串

    我正在使用一个xsl if在较大的条件下执行较小的条件xsl template块 我想测试当前属性的相等性xsl template匹配的节点 以下内容不起作用