如何用JavaScript读取HTML中带命名空间的嵌入式XML的s:Schema属性值
实现方法
要读取嵌入式XML中<s:Schema>的id和table属性,可按以下步骤用JavaScript实现:
步骤1:获取XML内容
先通过DOM选择器定位到嵌入XML的<script>元素,提取其文本内容:
const xmlScript = document.getElementById('data'); const xmlContent = xmlScript.textContent;
步骤2:解析XML字符串为DOM文档
使用DOMParser将XML字符串转换为可操作的XML文档对象:
const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlContent, 'application/xml');
步骤3:定位带命名空间的<s:Schema>元素
注意<s:Schema>对应的命名空间URI是xmlns:s="0",必须用命名空间匹配的方法查找元素,getElementsByTagNameNS是兼容性最稳定的方式:
// 第一个参数是命名空间URI,第二个是元素本地名(不带前缀s:) const schemaElement = xmlDoc.getElementsByTagNameNS('0', 'Schema')[0];
步骤4:读取目标属性
从找到的元素中直接提取id和table属性值:
const schemaId = schemaElement.getAttribute('id'); const schemaTable = schemaElement.getAttribute('table'); // 示例输出 console.log('Schema id:', schemaId); // 输出 RowsetSchema console.log('Schema table:', schemaTable); // 输出 ARTICLE
完整可运行代码
document.addEventListener('DOMContentLoaded', () => { // 获取XML内容 const xmlScript = document.getElementById('data'); const xmlContent = xmlScript.textContent; // 解析XML const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlContent, 'application/xml'); // 查找Schema元素 const schemaElement = xmlDoc.getElementsByTagNameNS('0', 'Schema')[0]; if (schemaElement) { const schemaId = schemaElement.getAttribute('id'); const schemaTable = schemaElement.getAttribute('table'); console.log('Schema id:', schemaId); console.log('Schema table:', schemaTable); } else { console.error('未找到<s:Schema>元素'); } });
关键注意点
- 不能直接用
getElementsByTagName('s:Schema')查找,XML命名空间的匹配核心是URI而非前缀,必须用命名空间专属方法。 - 命名空间URI对应
xmlns:s="0"中的0,而非前缀s,这是XML命名空间的基础规则。
内容的提问来源于stack exchange,提问作者raven_977
相关产品推荐
相关产品推荐

