如何从XML中获取指定kod_parametru对应的hodnota属性值?
获取指定Parametr节点的hodnota属性值
针对你提供的XML数据,要获取所有kod_parametru="PC0.1"的Parametr节点的hodnota属性值,以下是几种常用实现方式:
你的XML结构(格式化后)
<items> <item kod_zbozi="1010113414"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont Allegro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <item kod_zbozi="1011124131"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont OfficePro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <item kod_zbozi="1011124135"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont OfficePro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <item kod_zbozi="1011124139"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont OfficePro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 11 Pro" /> </item> <item kod_zbozi="1011124145"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont OfficePro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <item kod_zbozi="1011340128"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont OfficePro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> </items>
通用XPath表达式
所有支持XPath的工具/语言都可以用这个表达式直接定位目标属性:
//Parametr[@kod_parametru='PC0.1']/@hodnota
//Parametr:匹配XML中所有层级的Parametr节点[@kod_parametru='PC0.1']:筛选出kod_parametru属性值为PC0.1的节点/hodnota:提取该节点的hodnota属性值
Python 实现(内置xml.etree.ElementTree)
无需额外安装依赖,用标准库即可完成:
import xml.etree.ElementTree as ET # 解析XML字符串(如果是文件,替换为ET.parse("your_file.xml")) xml_content = """ <items> <item kod_zbozi="1010113414"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont Allegro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <!-- 其他item节点省略 --> </items> """ root = ET.fromstring(xml_content) # 筛选目标节点并提取属性值 results = [param.get("hodnota") for param in root.findall(".//Parametr[@kod_parametru='PC0.1']")] print(results) # 输出: ['AutoCont Allegro', 'AutoCont OfficePro', 'AutoCont OfficePro', 'AutoCont OfficePro', 'AutoCont OfficePro', 'AutoCont OfficePro']
Python 实现(lxml库,更灵活的XPath支持)
先安装依赖:pip install lxml,然后用XPath直接提取:
from lxml import etree xml_content = """你的XML内容""" root = etree.fromstring(xml_content) # 直接通过XPath获取所有目标属性值 results = root.xpath("//Parametr[@kod_parametru='PC0.1']/@hodnota") print(results) # 输出同上
C# 实现(LINQ to XML)
using System; using System.Linq; using System.Xml.Linq; class Program { static void Main() { string xmlContent = @"<items> <item kod_zbozi=""1010113414""> <Parametr kod_parametru=""PC0.1"" hodnota=""AutoCont Allegro"" /> <Parametr kod_parametru=""PC4.2"" hodnota=""Windows 10 Pro"" /> </item> <!-- 其他item节点省略 --> </items>"; XDocument doc = XDocument.Parse(xmlContent); var results = doc.Descendants("Parametr") .Where(p => p.Attribute("kod_parametru")?.Value == "PC0.1") .Select(p => p.Attribute("hodnota")?.Value) .ToList(); foreach (var value in results) { Console.WriteLine(value); } } }
JavaScript 实现(浏览器环境)
const xmlContent = ` <items> <item kod_zbozi="1010113414"> <Parametr kod_parametru="PC0.1" hodnota="AutoCont Allegro" /> <Parametr kod_parametru="PC4.2" hodnota="Windows 10 Pro" /> </item> <!-- 其他item节点省略 --> </items> `; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlContent, "text/xml"); // 用XPath查询目标属性 const xpathResult = xmlDoc.evaluate("//Parametr[@kod_parametru='PC0.1']/@hodnota", xmlDoc, null, XPathResult.ANY_TYPE, null); let results = []; let node = xpathResult.iterateNext(); while (node) { results.push(node.value); node = xpathResult.iterateNext(); } console.log(results);
内容的提问来源于stack exchange,提问作者janda82
相关产品推荐
相关产品推荐

