如何用XPath从Power Automate的HTTP with Azure AD结果提取网页内容?
解决方案
方法一:用XPath提取(推荐结构稳定的场景)
Power Automate没有专门的HTML解析连接器,但可以通过表达式结合xpath()函数实现提取,步骤如下:
- 把二进制内容转成字符串:添加
Compose动作,输入表达式:base64ToString(body('Get_web_resource')) - 预处理HTML为可解析的XML:再添加一个
Compose动作,清理HTML里可能导致XML解析失败的内容(比如DOCTYPE、未闭合标签),示例表达式:
(根据实际网页结构,还可以补充其他未闭合标签的处理,比如replace(replace(base64ToString(body('Get_web_resource')), '<!DOCTYPE[^>]*>', ''), '<br>', '<br/>')<div>这类) - 执行XPath提取:添加第三个
Compose动作,用xpath()函数抓目标内容,示例表达式:first(xpath(xml(outputs('Compose_2')), '//*[@id="Content"]/here/section[3]/ul/li/p/text()'))- 如果只需要第一个匹配的段落,用
first();如果有多个匹配项,用join(outputs(...), '\n')把所有结果拼接起来。
- 如果只需要第一个匹配的段落,用
方法二:用Split函数替代(适合结构简单固定的场景)
要是网页结构足够固定,直接通过目标段落的前后特征字符串拆分提取就行:
- 转二进制为字符串:同样用
Compose动作,表达式和上面一致:base64ToString(body('Get_web_resource')) - 拆分提取内容:添加
Compose动作,根据目标段落的前后标记拆分,示例表达式:split(split(outputs('Compose'), '<section id="Content">here<section[3]/ul/li/p>')[1], '</p>')[0]- 注意:得把表达式里的
<section id="Content">here<section[3]/ul/li/p>换成目标<p>标签的实际前置唯一特征字符串,</p>是段落的闭合标签,要是有其他更独特的后缀特征也可以替换。
- 注意:得把表达式里的
注意点
- 网页内容有动态变化或标签属性不稳定时,优先用XPath方法;
- 转字符串如果出现乱码,试试加上编码参数:
base64ToString(body('Get_web_resource'), 'UTF-8'); - 测试的时候可以先把网页内容输出到邮件或Compose里,确认特征字符串或XPath的准确性。
内容的提问来源于stack exchange,提问作者Kurkula
相关产品推荐
相关产品推荐

