使用 XPath 和正则表达式提取 HTML 注释中的文本
Posted
技术标签:
【中文标题】使用 XPath 和正则表达式提取 HTML 注释中的文本【英文标题】:Extract text in HTML comment using XPath and regex 【发布时间】:2012-10-03 06:34:58 【问题描述】:我正在尝试使用 XML/html 解析器解析 HTML 文件,其中包含用于翻译的隐藏注释文本,即下面的 X 和 Y。
<!-- Title: “ X ” Tags: “ Y ” -->
哪个 XPath 最适合 X 和 Y? //comment()
函数匹配整个节点,但我需要匹配 “
和 ”
引号之间出现的两次文本。
我想需要结合使用 XPath 和正则表达式来做到这一点,但我不知道如何解决这个问题。
【问题讨论】:
你在使用 javascript 吗?然后请提及或添加标签或两者兼而有之。 你用什么语言实现这个? 【参考方案1】:我假设评论中的引号是相同的,常规的 qoute 字符 "
- 不是显示此问题时出现的印刷不同的开始和结束引号。
如果这个假设是错误的,只需将以下表达式中的标准引用替换为相应的引用。
使用(如果有问题的评论是文档中的第一个评论):
substring-before(substring-after(//comment(), '"'), '"')
这会产生字符串(不带引号):
“X”
对于引号中的第二个字符串,请使用:
substring-before(
substring-after(
substring-after(
substring-after(//comment(), '"'),
'"'),
'"'),
'"')
基于 XSLT 的验证(因为 XSLT 样式表必须是格式良好的 XML 文档,我们将表达式中的引号替换为实体 &quot;
—— 只是为了避免由于嵌套引号引起的错误):
<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="/">
"<xsl:copy-of select="substring-before(substring-after(//comment(), '"'), '"')"/>"
=============
"<xsl:copy-of select=
"substring-before(substring-after(substring-after(substring-after(//comment(), '"'), '"'), '"'), '"')"/>"
</xsl:template>
</xsl:stylesheet>
当此转换应用于此 XML 文档时:
<html>
<body>
Hello.
<!-- Title: " X " Tags: " Y " -->
</body>
</html>
计算两个 XPath 表达式并将这两个计算的结果复制到输出中(用引号括起来以显示复制的确切字符串):
" X "
=============
" Y "
【讨论】:
以上是关于使用 XPath 和正则表达式提取 HTML 注释中的文本的主要内容,如果未能解决你的问题,请参考以下文章
jmeter获取响应数据中参数值的常用方式(JSON提取器 正则表达式提取器 XPath提取器 Bean Shell PostProcessor)