如何使用DataWeave 2.0/Mule 4检测HTML是否存在指定标题
DataWeave 2.0 检测HTML特定标题实现方案
完全可以通过DataWeave 2.0原生能力实现该校验需求,不需要引入额外Mule组件,利用内置的XML解析和节点递归查询能力即可完成。
实现逻辑
- 将输入HTML文本按XML格式宽松解析,兼容常规HTML的格式特性
- 递归提取文档中所有h1~h6级别的标题节点
- 比对标题节点的文本内容与目标值,输出校验结果
实现代码
%dw 2.0 output application/json var targetTitleText = "Name" // 宽松解析HTML为XML结构,避免命名空间、非法标签名导致解析失败 var parsedDoc = read(payload, "application/xml", { allowInvalidXmlNames: true, skipNamespaces: true }) // 聚合所有层级的标题节点,若仅需匹配指定级别标题(比如仅h2)可直接写对应标签选择器 var allTitleNodes = parsedDoc..*h1 ++ parsedDoc..*h2 ++ parsedDoc..*h3 ++ parsedDoc..*h4 ++ parsedDoc..*h5 ++ parsedDoc..*h6 --- { // 布尔值校验结果,true代表存在目标标题 checkResult: any(allTitleNodes match (node) -> trim(node) == targetTitleText), // 可选:返回匹配到的标题节点详情,不需要可删除该字段 matchedNodes: allTitleNodes filter (node) -> trim(node) == targetTitleText }
示例运行结果
传入提供的HTML示例时,脚本返回结果如下:
{ "checkResult": true, "matchedNodes": [ "Name" ] }
注意事项
- 若待处理HTML存在未自闭合的单标签(比如
<br>、<img>),可以在解析前先用replace函数将这类标签替换为自闭合格式(比如<br/>),避免XML解析报错 - 脚本中使用
trim()处理标题文本,是为了兼容标题前后存在多余空格、换行的场景,若需要严格完全匹配,直接删除trim()包裹即可 - 如果仅需要匹配特定级别的标题,比如仅查找h2标签,直接将
allTitleNodes赋值为parsedDoc..*h2即可,无需聚合所有层级标题
内容的提问来源于stack exchange,提问作者Singh
相关产品推荐
相关产品推荐

