XPathEvaluate不同的行为在其他环境(XPathEvaluate behave diffe

2019-10-20 13:35发布

我工作在一个团结的游戏,并希望解析XML文件中的一个统一的脚本,我的文件开始与线

<map version="1.0" orientation="orthogonal" width="16" height="12" tilewidth="64" tileheight="64">

我想要得到的地图width属性,

我的代码是:

var mapWidth = ((IEnumerable)tiledMapXmlRoot.XPathEvaluate("/@width")).Cast<XAttribute>().Select(a => Int32.Parse(a.Value)).First();

这是工作的,当我在Visual Studio中进行测试,但是当它在一个统一脚本运行失败的权利,在调试时,我可以看到它失败,因为XPathEvaluate返回类型System.Xml.XPath.SimpleSlashIterator的空集

而在Visual Studio中的返回类型是System.Xml.XPath.XPathEvaluator.EvaluateIterator,它是一个元素集合作为预期

怎么可能为同一代码在两个环境不同的工作吗? 我看着System.Xml.Linq的版本,并在Visual Studio中的4.0.0.0而团结(MonoDevelop的脚本编辑器),它是3.5.0.0但看着库文件的代码应该仍然工作

Answer 1:

/@width应返回任何结果,不管你的源文件的。 它选择文档节点的宽度属性(XPath 1.0中称为“根节点”),并且文件节点不具有属性。 返回结果为这个表达任何XPath处理器是不符合的。 正确的表达是/*/@width ,它返回文档中的最外层的元素的宽度属性。



文章来源: XPathEvaluate behave differently in other environments