正则表达式使用 xslt 匹配某些元素文本
Posted
技术标签:
【中文标题】正则表达式使用 xslt 匹配某些元素文本【英文标题】:Regex to match some element text using xslt 【发布时间】:2021-03-30 10:46:36 【问题描述】:我正在将 html 内容转换为 xml。我的情况符合以下情况。
<div class="subs1"> ( <i> l </i> ) “Sovereign lands” means the</div>
我尝试了下面的表达式
div[@class='subs1'][matches(.,'^
*\s*\(\s*<i>i</i>\s*\)')]
但这不起作用。请有人帮助我
【问题讨论】:
【参考方案1】:您正在尝试匹配 '<i>'
,但 '<i>'
不是元素文本的一部分。 <i>
是一个子元素。
我在match()
与.
从<div>
运行时得到的字符串部分加了下划线:
<div class="subs1"> ( <i> l </i> ) “Sovereign lands” means the</div>
_____ _____ _______________________________
如果您想确保有一个包含特定内容的 <i>
子级,那么您需要单独检查。
div[@class='subs1' and matches(.,'^
*\s*\(\s*i\s*\)') and i[matches(., 'i')]]
【讨论】:
我需要匹配包含 元素的右大括号 ( l ) @Reegan 也许我不够清楚。 您无法匹配<i>
元素。
您共享的内容适用于 div[@class='subs1' and matches(.,'^
*\s*(\s*i\s*)'),但是“and i[matches(., 'i')]”不起作用。它显示为假,我无法选择这样的场景
@Reegan 好吧,选择一个与您的<i>
内容实际匹配的正则表达式。在您的示例 XML 中,<i>
包含一个小“L”,当前的正则表达式无法匹配。
感谢 Tomalak,我使用了这个正则表达式 div[@class='subs1'][matches(.,'^
*\s*(\s*i\s*)' )] 和 i[matches(normalize-space(.), 'l')] 仍然显示错误以上是关于正则表达式使用 xslt 匹配某些元素文本的主要内容,如果未能解决你的问题,请参考以下文章