如何在Dart中通过XPath提取属性的纯值而非带属性名内容?
解决Dart中XPath提取XML属性值时获取纯值的问题
你当前用Dart的xml和xpath包提取XML属性时,得到的是id="D1"这类包含属性名的完整属性字符串,但实际需要的是纯属性值(如D1、D2)。
问题原因
通过xpath()方法获取到的节点是XmlAttribute类型的对象,直接打印或转换为字符串时,会输出完整的属性格式(属性名="值"),而不是单独的属性值。
解决方案
访问XmlAttribute对象的value属性,就能拿到纯属性值。修改代码中的循环部分即可:
修改后的完整代码:
import 'package:xml/xml.dart'; import 'package:xml/xpath.dart'; final bookshelfXml = ''' <?xml version="1.0" encoding="utf-8"?> <document id="doc1"> <line id="1"> <data id="D1" value="20" /> <data id="D2" value="40" /> </line> <line id="2"> <data id="D1" value="90" /> <data id="D2" value="340" /> </line> </document>'''; void main (List<String> arguments) { final document = XmlDocument.parse(bookshelfXml); final nodes = document.xpath('/document/line[@id="1"]/*/@id'); for (var i = 0; i < nodes.length; i++) { print('id${i+1} is ${nodes[i].value}'); } }
效果说明
- 移除了不必要的全局
nn列表和重复的document解析,简化代码 - 调用
nodes[i].value获取纯属性值后,输出结果会符合预期:id1 is D1 id2 is D2
内容的提问来源于stack exchange,提问作者bangdt
相关产品推荐
相关产品推荐

