如何用JavaScript提取嵌套XML中指定文本的Button元素的bounds属性
提取Android布局XML中指定文本按钮的bounds属性的JavaScript实现方法
你用jsdom匹配不到元素的核心原因是:jsdom是为HTML DOM设计的,而Android布局是XML格式,标签名里的点号(比如android.widget.Button)会被jsdom当成HTML的类选择器语法解析,而非完整的标签名,所以querySelectorAll("android.widget.button")实际是在找标签为<android>且带有widget、button类的元素,自然匹配不到目标按钮。
下面提供两种可行的实现方式:
方法一:使用XML专用解析器(推荐)
Node.js环境可以用xmldom库(专门处理XML的DOM解析),步骤如下:
- 安装依赖:
npm install xmldom
- 编写解析代码:
const { DOMParser } = require('xmldom'); // 替换为你的Android布局XML字符串 const xstr = '<your-android-layout-xml>'; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xstr, 'text/xml'); // 获取所有按钮元素(注意Android布局中标签名通常是首字母大写的Button,根据实际XML调整) const buttons = xmlDoc.getElementsByTagName('android.widget.Button'); let targetBounds = ''; // 遍历按钮匹配目标文本 for (const button of buttons) { const buttonText = button.getAttribute('text'); if (buttonText === 'Allow' || buttonText === 'Don’t allow') { targetBounds = button.getAttribute('bounds'); break; } } console.log(targetBounds); // 输出预期的bounds值,如[177,1556][1263,1752]
方法二:正则表达式匹配(适合简单场景)
如果你的XML结构比较固定,也可以直接用正则快速提取,无需额外依赖:
const xstr = '<your-android-layout-xml>'; // 正则匹配text为Allow/Don’t allow的button元素的bounds属性 const regexPattern = /<android\.widget\.(?:Button|button)[^>]*text="(Allow|Don’t allow)"[^>]*bounds="([^"]+)"/i; const matchResult = xstr.match(regexPattern); if (matchResult) { console.log(matchResult[2]); // 输出目标bounds值 }
内容的提问来源于stack exchange,提问作者Aritra Nayak
相关产品推荐
相关产品推荐

