Foxtable(狐表)用户栏目专家坐堂 → [求助]解析project的xml文件信息


  共有4388人关注过本帖树形打印复制链接

主题:[求助]解析project的xml文件信息

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]解析project的xml文件信息  发帖心情 Post By:2021/7/16 6:59:00 [显示全部帖子]

现在有一个project导出的xml文件,想把各项工作的信息导出来。也就是<Assignments>下面的信息。
看了一下帮助里的解析xml文件,跟这个还有些区别。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:project0715.zip


这个文件怎么解析?

本来只需要下面的这一组信息,有很多组<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>

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/7/18 11:51:00 [显示全部帖子]

实际导出的xml文件如下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目2.zip


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/7/22 10:34:00 [显示全部帖子]

解析的时候还是有问题。就是遇到只有一个任务或者工期只安排一天的时候,解析就会报错。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:ccs.rar


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2285 积分:18787 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/7/22 11:01:00 [显示全部帖子]

If typeof xo("Assignments")("Assignment")("TimephasedData")   Is JArray
 Output.Show("按数组解析")
Else
Output.Show("按对象解析")
End If

执行的结果全部是("按对象解析"),就没有显示出("按数组解析")的,也就是说,执行的结果全部不是数组,没有意义

 回到顶部