XPathEvaluate在其他环境中的行为有所不同

时间:2014-07-27 05:17:37

标签: c# xpath unity3d linq-to-xml

我正在开发一个统一游戏,想要在统一脚本中解析XML文件, 我的文件以

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

我希望得到地图宽度属性

我的代码是:

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,而在Unity(monodevelop脚本编辑器)中它是3.5.0.0,但查看库文档,代码应该仍然有用

1 个答案:

答案 0 :(得分:0)

无论您的源文档是什么,

/@width都不会返回任何内容。它选择文档节点的width属性(称为&#34;根节点&#34;在XPath 1.0中),文档节点没有属性。返回此表达式结果的任何XPath处理器都不符合要求。正确的表达式是/*/@width,它返回文档中最外层元素的width属性。