Flutter/Dart中XPath的contains函数无法正常使用的问题
问题分析与解决
报错提示end of input expected at 1:17指向contains起始位置,说明当前使用的xml/xpath.dart包的XPath解析器无法识别contains()函数——尽管文档宣称支持XPath 1.0,但该包的XPath实现属于基础子集,并未完整覆盖XPath 1.0的所有函数(比如contains这类字符串处理函数)。
替代方案
方案1:Dart代码层面过滤
先通过XPath获取所有Representation节点,再在Dart中手动筛选符合条件的节点:
import 'package:xml/xml.dart'; import 'package:xml/xpath.dart'; // ... // 获取所有Representation节点 var representations = MPD_xml.xpath("//Representation"); // 筛选mimeType包含audio的节点 var audioReps = representations.where((node) { var mimeType = node.getAttribute('mimeType'); return mimeType != null && mimeType.contains('audio'); }); // 获取第一个匹配的BaseURL文本 if (audioReps.isNotEmpty) { var baseUrl = audioReps.first.xpath("BaseURL").first.innerText; print(baseUrl); }
方案2:更换更完整的XPath包
如果需要频繁使用复杂XPath表达式,建议替换为对XPath 1.0支持更完整的Dart包,直接使用原有contains表达式即可。
内容的提问来源于stack exchange,提问作者Laura Bieber
相关产品推荐
相关产品推荐

