- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经有了答案,但我想了解它为何有效,但我还不确定。
我有以下填充了匹配项的变量:
<xsl:variable name="invalid_characters" as="xs:string*">
<xsl:analyze-string select="$urlToValidate" regex="{$regex}">
<xsl:matching-substring>
<xsl:value-of select="."/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
然后我希望模板对那个变量做一些事情,以防它不为空或为空,所以我这样问:
<xsl:if test="not($invalid_characters='')">
<error>The error</error>
</xsl:if>
问题是 if 始终为真...即使变量为空,我也必须这样做才能工作
<xsl:if test="$invalid_characters!=''">
<error>The error</error>
</xsl:if>
让我困扰的是,如果我这样做:
<xsl:if test="$invalid_characters=''">
<error>The error</error>
</xsl:if>
if 语句执行了它应该执行的操作,所以,有人知道为什么我首先执行的操作没有按预期执行吗?
提前致谢:)
--- 编辑:有人说这个问题很难理解,所以我举个例子。
在这里您可以看到带有两个 if 语句和输入的 xslt 的完整示例。
xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="//@*"/>
</xsl:template>
<xsl:template match="@href[not(../scope) or ../scope='local']|@conref|@conrefend">
<xsl:variable name="urlToValidate" select="if(substring-before(.,'#')='')
then .
else substring-before(.,'#')"/>
<xsl:variable name="regex">[\$'%\*\./=\\<>_\(\)\[\]:;,\^~\?|@!\+&\}\{]</xsl:variable>
<xsl:variable name="invalid_characters" as="xs:string*">
<xsl:analyze-string select="$urlToValidate" regex="{$regex}">
<xsl:matching-substring>
<xsl:value-of select="."/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:if test="not($invalid_characters='')">
<error1>
<xsl:value-of select="."/>
</error1>
</xsl:if>
<xsl:if test="$invalid_characters!=''">
<error2>
<xsl:value-of select="."/>
</error2>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
这里是输入:
<links>
<image conrefend="GUID-6A680D85-10FA-4BCC-B57D-B5138ABE6A59" />
<image conrefend="GUID-1F14088D-4376-46FF-AE6F-937C2AAF5A43" />
<image conrefend="GUID-BB4F234D-3584-4B92-B9CB-D91FBD913B8D#GUID-BB4F234D-584-4B92-B9CB-D91FBD913B8D/MSCPDR1" />
<image conrefend="GUID-6E03D2D4-3FA9-4437-8689-06B873FB56CB" />
<image conrefend="GUID-C97E0253-73C1-4A27-B43E-7A913400BBB8" />
<image conrefend="COPY-GUI'D-86241639-37CD-4CF7-A7AA-F09F4A763944"/>
<image conrefend="COPY-GUID-86241639-37CD-4CF7-A7AA-F09F4A763944"/>
<image conref="COPY-GUID/*+-862416}39-37CD-4CF7-A7AA-F09F4A763944" />
<image conrefend="COPY-GUID-8624163{9-37CD-4CF7-A7AA-F09F4A763944"/>
<image href="COPY-GUID-8624163<9-37CD-4CF7-A7AA-F09F4A763944" scope="local"/>
<image href="COPY-GUID-8624163~9-37CD-4CF7-A7AA-F09F4A763944" scope="local"/>
</links>
这是我得到的结果:
<error1>GUID-6A680D85-10FA-4BCC-B57D-B5138ABE6A59</error1>
<error1>GUID-1F14088D-4376-46FF-AE6F-937C2AAF5A43</error1>
<error1>GUID-BB4F234D-3584-4B92-B9CB-D91FBD913B8D#GUID-BB4F234D-3584-4B92-B9CB-D91FBD913B8D/MSCPDR1</error1>
<error1>GUID-6E03D2D4-3FA9-4437-8689-06B873FB56CB</error1>
<error1>GUID-C97E0253-73C1-4A27-B43E-7A913400BBB8</error1>
<error1>COPY-GUI'D-86241639-37CD-4CF7-A7AA-F09F4A763944</error1>
<error2>COPY-GUI'D-86241639-37CD-4CF7-A7AA-F09F4A763944</error2>
<error1>COPY-GUID-86241639-37CD-4CF7-A7AA-F09F4A763944</error1>
<error1>COPY-GUID/*+-862416}39-37CD-4CF7-A7AA-F09F4A763944</error1>
<error2>COPY-GUID/*+-862416}39-37CD-4CF7-A7AA-F09F4A763944</error2>
<error1>COPY-GUID-8624163{9-37CD-4CF7-A7AA-F09F4A763944</error1>
<error2>COPY-GUID-8624163{9-37CD-4CF7-A7AA-F09F4A763944</error2>
<error1>COPY-GUID-8624163<9-37CD-4CF7-A7AA-F09F4A763944</error1>
<error2>COPY-GUID-8624163<9-37CD-4CF7-A7AA-F09F4A763944</error2>
<error1>COPY-GUID-8624163~9-37CD-4CF7-A7AA-F09F4A763944</error1>
<error2>COPY-GUID-8624163~9-37CD-4CF7-A7AA-F09F4A763944</error2>
如您所见,每个条目都有一个 error1 标签,而 error2 标签只用于那些应该出现的情况。
关于为什么第一次比较没有像我认为的那样起作用的任何想法?
最佳答案
您的变量是一个序列,包含零个、一个或多个字符串(每个字符串是否为空取决于特定的正则表达式)。
空序列和空字符串不是一回事;空序列和空字符串之间的比较总是返回 false:
() = '' false
() != '' false
包含单个字符串的序列等同于该字符串(参见 XPath Data Model ),因此它可以或者是空字符串或者(异或)不同于空字符串:
('') = '' true
('') != '' false
('foo') = '' false
('foo') != '' true
如果两个序列至少有一个相同的项目,则它们是“相等的”,如果它们至少有一个不同的项目,则它们是“不同的”。因此,两个序列可以都相等也不同。
这也适用于比较多项目序列和字符串,因为我们已经看到字符串等同于仅包含该字符串的序列:
('', '') = '' true
('', '') != '' false
('foo', 'bar') = '' false
('foo', 'bar') != '' true
('foo', '') = '' true
('foo', '') != '' true
在处理序列时,检查 $a != $b
不等同于 检查 not($a = $b)
关于xslt - 字符串序列与空字符串的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038071/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!