如何在XML的嵌套标签中获取上级标签的属性值?
在XML嵌套标签中获取父标签属性值的方法
不同的XML处理工具和场景下,获取父标签属性的方式有所不同,以下是几种常用方案:
XPath 定位(通用方案)
XPath 支持通过父轴(..)直接定位到父节点,再获取其属性。针对你的示例,要在<nestedtag>中获取父节点的name属性,可使用表达式../@name。
如果是在XSLT中应用,示例代码如下:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="nestedtag"> <!-- 输出父标签的name属性值 --> <xsl:value-of select="../@name"/> </xsl:template> </xsl:stylesheet>Python xml.etree.ElementTree 实现
利用ElementTree的getparent()方法获取父节点,再调用get()方法提取属性:import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse("your_xml_file.xml") root = tree.getroot() # 遍历所有nestedtag节点 for nested_tag in root.findall(".//nestedtag"): parent_tag = nested_tag.getparent() parent_name = parent_tag.get("name") print(parent_name) # 输出 CharliePython lxml 库实现
lxml对XPath支持更完善,可直接通过XPath表达式获取:from lxml import etree tree = etree.parse("your_xml_file.xml") # 获取所有nestedtag节点 nested_tags = tree.xpath("//nestedtag") for tag in nested_tags: # 通过XPath获取父节点的name属性 parent_name = tag.xpath("../@name")[0] print(parent_name)Java DOM 解析实现
通过getParentNode()获取父元素,再调用getAttribute()提取属性值:import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; public class XmlParentAttribute { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File("your_xml_file.xml")); NodeList nestedTags = doc.getElementsByTagName("nestedtag"); for (int i = 0; i < nestedTags.getLength(); i++) { Element nested = (Element) nestedTags.item(i); Element parent = (Element) nested.getParentNode(); String parentName = parent.getAttribute("name"); System.out.println(parentName); // 输出 Charlie } } catch (Exception e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Ostap Strashevskii
相关产品推荐
相关产品推荐

