gpt4 book ai didi

xslt - 如何在 xslt 中控制 boolean 渲染

转载 作者:行者123 更新时间:2023-12-04 01:57:40 25 4
gpt4 key购买 nike

符合<boolean> spec of Xml-RPC我需要改造我的 xs:boolean来自 true|false1|0 .

我使用 xsl:choose 解决了这个问题

<xsl:template match="Foo">
<member>
<name>Baz</name>
<value>
<boolean>
<xsl:choose>
<xsl:when test=".='true'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</boolean>
</value>
</member>
</xsl:template>

但想知道在使用 xslt 1.0 进行转换时,是否有一种不那么脆弱的方法来控制 boolean 值的呈现方式。

最佳答案

使用 :

number(boolean(.))

通过标准 XPath 函数的定义 number() 它正好产生 {0, 1}分别应用于 {true(), false()}
谨防!如果你在字符串上使用这个结构,结果是 'false' 和 'true' 都为真 ,因为对于字符串参数, boolean() is true if and only if its length is non-zero .

所以,如果你想转换字符串,而不是 boolean 值 ,然后使用这个表达式:
number(not(. = 'false'))

下面是一个基于 XSLT 的验证 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="text()">
<xsl:value-of select="number(not(. = 'false'))"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时 :
<t>
<x>true</x>
<y>false</y>
</t>

产生了想要的、正确的结果 :
<t>
<x>1</x>
<y>0</y>
</t>

关于xslt - 如何在 xslt 中控制 boolean 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com