AS3/Flash/AIR技术:如何获取复杂XML元素的文本值?
如何获取包含子元素的XML元素的标签间文本值
当XML元素包含子元素时,直接调用toString()这类方法会返回整个元素的所有内容(包括子标签),要仅提取标签间的文本,可通过以下几种方法实现:
方法1:利用XPath定位文本节点
XPath的text()函数可以精准选中元素下的所有文本节点,不受子元素干扰。针对你的场景,假设XML结构为:
<myXML> I want this text <myChild/> </myXML>
使用XPath表达式/myXML/text()即可提取目标文本。
Python(xml.etree.ElementTree)
import xml.etree.ElementTree as ET xml_content = """ <myXML> I want this text <myChild/> </myXML> """ root = ET.fromstring(xml_content) # 提取所有直接子文本节点,拼接后去除多余空白 target_text = ''.join(root.itertext()).strip() print(target_text)
Java(DOM解析)
import org.w3c.dom.Document; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; public class XmlTextExtractor { public static void main(String[] args) throws Exception { String xml = "<myXML>I want this text<myChild/></myXML>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new ByteArrayInputStream(xml.getBytes())); NodeList childNodes = doc.getElementsByTagName("myXML").item(0).getChildNodes(); StringBuilder textBuilder = new StringBuilder(); for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i).getNodeType() == org.w3c.dom.Node.TEXT_NODE) { textBuilder.append(childNodes.item(i).getNodeValue().trim()); } } System.out.println(textBuilder.toString()); } }
方法2:遍历子节点过滤文本
遍历目标元素的所有子节点,仅保留文本类型的节点内容,忽略子元素节点。
JavaScript(浏览器端/Node.js xmldom)
const xmlStr = '<myXML>I want this text<myChild/></myXML>'; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlStr, 'text/xml'); const myXmlElement = xmlDoc.querySelector('myXML'); let resultText = ''; for (const node of myXmlElement.childNodes) { if (node.nodeType === Node.TEXT_NODE) { resultText += node.textContent.trim(); } } console.log(resultText);
内容的提问来源于stack exchange,提问作者BladePoint
相关产品推荐
相关产品推荐

