以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]解析project的xml文件信息 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170194) |
||||
-- 作者:chnfo -- 发布时间:2021/7/16 6:59:00 -- [求助]解析project的xml文件信息 现在有一个project导出的xml文件,想把各项工作的信息导出来。也就是<Assignments>下面的信息。 看了一下帮助里的解析xml文件,跟这个还有些区别。
这个文件怎么解析? 本来只需要下面的这一组信息,有很多组<TimephasedData>信息,下面是其中一个 <TimephasedData>
<Type>1</Type>
<UID>2</UID>
<Start>2021-07-13T08:00:00</Start>
<Finish>2021-07-14T08:00:00</Finish>
<Unit>2</Unit>
<Value>PT8H0M0S</Value> </TimephasedData> |
||||
-- 作者:有点蓝 -- 发布时间:2021/7/16 8:48:00 -- Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(FileSys.ReadAllText("D:\\问题\\Project0715.xml")) \'Output.Show(xo.Tostring) 可以使用这个转换为json,然后按照json的方法解析即可,比如 Output.Show(xo("Assignments")("Assignment")("TimephasedData")(0)("Start").Tostring)
|
||||
-- 作者:chnfo -- 发布时间:2021/7/18 11:32:00 -- 有个问题:当project导出的文件比较大时(现在的一个例子,导出的xml文件有4.5M),执行上面的代码会报错 版本:2021.5.29.1 --------------------------- 代码执行出错,错误信息: System.InvalidOperationException: Cannot access child value on Newtonsoft.Json.Linq.JProperty. 在 Newtonsoft.Json.Linq.JToken.get_Item(Object key) 在 UserCode.Test() Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(FileSys.ReadAllText(".\\项目2.xml")) For Each bm As JToken In xo("Assignments")("Assignment") For Each x As JToken In bm("TimephasedData") Dim uid As String = x("UID").Tostring \'加这一句就会报错 next next [此贴子已经被作者于2021/7/18 11:52:18编辑过]
|
||||
-- 作者:chnfo -- 发布时间:2021/7/18 11:51:00 -- 实际导出的xml文件如下
|
||||
-- 作者:有点蓝 -- 发布时间:2021/7/18 20:47:00 -- 这个错误和文件大小没有任何关系,到了循环里说明文件已经加载了。出错是因为解析出错,TimephasedData一个数组,不是一个对象 学学怎么解析数组:http://www.foxtable.com/mobilehelp/topics/0171.htm
|
||||
-- 作者:chnfo -- 发布时间:2021/7/20 9:27:00 -- 实际测试了一下。如果某一个<Assignment>里,如果有两个或以上的<TimephasedData>用上面的代码就没有问题,但如果只有一个<TimephasedData>,才会报错。这是为什么呢? 或者Assignments里只有一个Assignment,也会报错
版主说TimephasedData不是一个对象,而是一个数组,貌似没有什么区别。
<TimephasedData>
<Type>1</Type>
<UID>6</UID>
<Start>2021-07-07T08:00:00</Start>
<Finish>2021-07-08T08:00:00</Finish>
<Unit>2</Unit>
<Value>PT8H0M0S</Value>
</TimephasedData>
<TimephasedData>
<Type>1</Type>
<UID>6</UID>
<Start>2021-07-08T08:00:00</Start>
<Finish>2021-07-09T08:00:00</Finish>
<Unit>2</Unit>
<Value>PT8H0M0S</Value>
</TimephasedData> [此贴子已经被作者于2021/7/20 9:30:56编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2021/7/20 9:36:00 -- 判断一下是否数组 if typeof xo("Assignments")("Assignment")("TimephasedData") is JArray 按数组解析 else 按对象解析 endif
|
||||
-- 作者:chnfo -- 发布时间:2021/7/22 10:34:00 -- 解析的时候还是有问题。就是遇到只有一个任务或者工期只安排一天的时候,解析就会报错。
|
||||
-- 作者:有点蓝 -- 发布时间:2021/7/22 10:41:00 -- 自行调试:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错,相应做判断 |
||||
-- 作者:chnfo -- 发布时间:2021/7/22 11:01:00 -- If typeof xo("Assignments")("Assignment")("TimephasedData") Is JArray Output.Show("按数组解析") Else Output.Show("按对象解析") End If 执行的结果全部是("按对象解析"),就没有显示出("按数组解析")的,也就是说,执行的结果全部不是数组,没有意义
|