解析 XML、日期格式(PT0H0M0S、PT2920H0M0S)

use*_*142 4 python xml ms-project python-2.7

我正在尝试使用 python 解析从 MS Project 2013 导出的 xml 文件,它包含以下数据:

<TimephasedData>
    <Type>1</Type>
    <UID>4628</UID>
    <Start>2014-09-22T08:00:00</Start>
    <Finish>2015-09-22T08:00:00</Finish>
    <Unit>8</Unit>
    <Value>PT2920H0M0S</Value>
</TimephasedData>
<TimephasedData>
    <Type>1</Type>
    <UID>4628</UID>
    <Start>2015-09-22T08:00:00</Start>
    <Finish>2015-09-23T08:00:00</Finish>
    <Unit>2</Unit>
    <Value>PT8H0M0S</Value>
</TimephasedData>
Run Code Online (Sandbox Code Playgroud)

我不明白 PT8H0M0S 和 PT2920H0M0S 代表什么(TimephasedData)。目前我通过替换字符“T”来解析日期,然后使用strptime

Tom*_*lak 5

这是 ISO 8601 持续时间值。比较iCal 持续时间数据类型规范,它使用以下表示法:

正式定义

值类型由以下符号定义:

dur-value  = (["+"] / "-") "P" (dur-date / dur-time / dur-week)
dur-date   = dur-day [dur-time]   
dur-time   = "T" (dur-hour / dur-minute / dur-second)
dur-week   = 1*DIGIT "W"
dur-hour   = 1*DIGIT "H" [dur-minute]
dur-minute = 1*DIGIT "M" [dur-second]  
dur-second = 1*DIGIT "S"
dur-day    = 1*DIGIT "D"
Run Code Online (Sandbox Code Playgroud)

PT8H0M0S持续时间 ( T)、8 小时 ( 8H)、0 分钟 ( 0M)、0 秒 ( 0S)也是如此。(P当然,它代表“期间”)。

至少有一个 Python 包可以处理这些类型的值的转换,例如https://pypi.python.org/pypi/isodate。