当前位置: 首页 > 知识库问答 >
问题:

按文本选择时,为什么规范化空间(text())会忽略内部节点?

桂丰
2023-03-14

为什么在下面的示例中,我可以使用//标签[text()[normalize-space()='some label']]//标签[normalize space(text())='some label']按文本选择标签并忽略span的内容?为什么?我真的很想了解这个问题。在里面http://www.w3.org/TR/xpath/#function-规范化空间没有关于此功能的信息。这正是我想要的,但我也非常想知道为什么这个解决方案有效:)

顺便问一下,哪种语法更好://标签[text()[normalize-space()='some label']]vs//标签[normalize space(text())='some label']为什么?

<label>
<span>some span</span>
  some label   
</label>

<label>
    other label
<span>other span</span>
</label>

我在寻找你有用的答案:)

共有2个答案

楚知
2023-03-14

text()返回当前节点(标签)子节点的所有文本节点

但是有些span不是标签的子节点,而是span的子节点。

您可以使用//text()获取所有子体文本节点,或者使用span/text()获取span的文本节点

--

您需要使用//label[//text()[normalize-space()='some label']]而不是//label[normalize space(//text())='some label'],因为后者仅在存在单个文本节点时有效

凤高澹
2023-03-14

这与normalize-space()无关,与text()有关。

text()child::text()的缩写,它选择作为label元素的直接子元素的文本节点。除非剥离空白文本节点,否则示例中的label元素有两个子文本节点,其中一个是全部空白,另一个包含由空白包围的“somelabel”。

BTW, which syntax is better: //label[text()[normalize-space() = 'some label']] vs //label[normalize-space(text()) = 'some label'] and why?

他们做不同的事情;更好的是做你想做的事。

在XPath 1.0中,第一个表达式选择具有子文本节点的标签元素,该子文本节点的值在空白规范化后等于“某些标签”。第二个选择标签元素,其第一个子文本节点在空白规范化后等于“一些标签”。这是因为,如果您给它一个节点集,则它会获取节点集中第一个节点的字符串值。

在XPath 2.0中,第一个表达式选择具有子文本节点的标签元素,该子文本节点的值在空白规范化后等于“某些标签”。第二个选择标签元素,如果它们有一个子文本节点,在空白规范化后,等于“一些标签”,但是如果标签元素有多个子文本节点,就会引发错误。这是因为规范化空间()(像所有期望字符串的函数一样),雾化它的参数,并在雾化序列的长度大于1时报告类型错误。

 类似资料:
  • 所以很明显Android Drawable Importer在最新的AS/intellij版本下已经从根本上崩溃了。 我下载并重新安装了android-drawable-importer-intellij-plugin-0.5-81.zip,但没有效果。这个插件上一次打造是在2016年。 这让我陷入困境,因为新的Android Studio资源管理器导入Drawables功能不允许我选择外部256

  • 问题内容: 我有一个带有关系的实体,我想通过一个查询来检索它,因此使用。有时,Hibernate不尊重它,而是发出N + 1 秒。随着 有时 我的意思是,因为我不知道是什么触发它,我有案件对不同的查询,这可能发生,或者不一样的类。 这是带有我使用的注释的简化实体: 用 我希望单个查询能够同时获取其及其内容,例如 相反,我得到了第一选择所有N S和那么N 献给所有S(考虑没有缓存)。 我发现了许多类

  • 问题内容: 我正在尝试在包级别使用Hibernate @TypeDef批注,这与Hibernate文档中所描述的完全相同。我正在使用和。代码可以编译,并且在类路径中,但是Hibernate仍然看不到它。 如果我上课,那是行得通的,但是如果我把放在那,那是没有用的。我试图用Google搜索,但找不到任何有用的信息。 谢谢! 问题答案: 您可能需要添加一个 到您的Hibernate配置文件,或调用co

  • 问题内容: 以下代码在Chrome或IE中正确显示(图像为200px宽)。在Firefox和Opera中,样式被完全忽略。为什么会发生这种情况,并且周围有很好的解决方法?另外,最符合标准的方法是什么? 注意 针对这种特殊情况的一种可能的解决方法是将设置为。但是,这是一个非常人为的示例。我正在寻找可变宽度容器的策略。 [更新] 如下面的mVChr所述,w3.org规范声明不适用于元素。我尝试使用,但

  • 我对iOS布局约束的机制有误解。请参阅下面列出的我放在viewDidLoad中的代码。 在我看来,我的意图是明确的。我想在设备屏幕的中央看到一个按钮。但我只能看到下面的图片。 我在项目控制台中有一个输出,非常可怕,我无法从中理解任何东西。 无法同时满足约束。可能以下列表中至少有一个约束是您不想要的。尝试以下方法:(1)查看每个约束,并尝试找出您不期望的约束;(2) 查找添加了一个或多个不需要的约束

  • 问题内容: 我正在使用这样的应用程序加载文件: 属性文件(最初)是这样的: 奇怪的是,当我调用时,它总是返回,但是我可以加载所有其他属性而没有任何问题。我通过在属性文件的顶部添加注释来解决该问题,然后一切正常。 我的问题是:Java为什么要这样做?我似乎找不到关于此的任何文档,而且似乎违反直觉。 问题答案: 感谢@ KonstantinV.Salikhov和@pms在寻找答案方面的帮助;我决定发布