You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:结束位置不固定时如何提取字符串子串

最优XML文本提取方案

这题我太有发言权了!既然XML的结构是固定的,绝对不要用固定索引的字符串截取或者正则表达式——前者容错率为0,后者在XML结构稍有变化(比如多了空格、属性顺序调整)就会失效。最优解一定是用专门的XML解析器,它能正确处理XML的语法规则,稳定性拉满。

下面给几个主流语言的实现示例,都是用各语言内置或常用的XML解析工具:

Python 实现

用Python标准库的xml.etree.ElementTree,无需额外安装依赖:

import xml.etree.ElementTree as ET

# 你的XML字符串
xml_content = '''<?xml version='1.0' encoding='UTF-8'?><root available-locales="en_US" default-locale="en_US"><Title language-id="en_US">My Title</Title></root>'''

# 解析XML字符串
root_node = ET.fromstring(xml_content)
# 找到Title节点并提取文本
title_text = root_node.find('Title').text

print(title_text)  # 输出: My Title

JavaScript 实现

浏览器环境

用原生DOMParser直接解析:

const xmlStr = '<?xml version="1.0" encoding="UTF-8"?><root available-locales="en_US" default-locale="en_US"><Title language-id="en_US">My Title</Title></root>';
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlStr, "text/xml");
// 通过选择器找到Title节点
const titleText = xmlDoc.querySelector("Title").textContent;

console.log(titleText); // 输出: My Title

Node.js 环境

可以用流行的xml2js库(先通过npm install xml2js安装):

const xml2js = require('xml2js');

const xmlStr = '<?xml version="1.0" encoding="UTF-8"?><root available-locales="en_US" default-locale="en_US"><Title language-id="en_US">My Title</Title></root>';
xml2js.parseString(xmlStr, (err, parsedResult) => {
  if (err) throw err;
  // 从解析结果中提取Title文本
  const titleText = parsedResult.root.Title[0];
  console.log(titleText); // 输出: My Title
});

Java 实现

用Java内置的javax.xml.parsers工具类:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.ByteArrayInputStream;

public class XmlTitleExtractor {
    public static void main(String[] args) throws Exception {
        String xmlStr = "<?xml version='1.0' encoding='UTF-8'?><root available-locales=\"en_US\" default-locale=\"en_US\"><Title language-id=\"en_US\">My Title</Title></root>";
        
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document xmlDoc = builder.parse(new ByteArrayInputStream(xmlStr.getBytes()));
        
        // 获取第一个Title节点并提取文本
        Element titleElement = (Element) xmlDoc.getElementsByTagName("Title").item(0);
        String titleText = titleElement.getTextContent();
        
        System.out.println(titleText); // 输出: My Title
    }
}

为什么不推荐正则?

虽然你可以写出类似/<Title[^>]*>(.*?)<\/Title>/的正则表达式来匹配文本,但XML的语法规则比想象中复杂——比如标签可能跨多行、属性里有特殊字符、甚至未来可能出现嵌套结构,这些情况都会让正则直接失效。而XML解析器是专门为处理这类结构设计的,能完美应对各种合法的XML格式。

内容的提问来源于stack exchange,提问作者dukenukem6487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:45