对于节点“ TransactionDate”,在为策略“ POL000002NGJ”更新它之前,我有一个逻辑。 我尝试实现的逻辑是,如果现有的'TransactionDate'<今天不存在,则添加5天的当前值并将其解析为xml。
XML中的交易日期格式:2020-03-23T10:56:15.00
请注意,如果我像下面那样解析DateTime值,则效果很好,但是我不想对值进行硬编码...我想将其解析为字符串对象以处理任何日期时间,格式为“”%Y -%m-%dT%H:%M:%S.%f“”“ ...
# <TransactionDate>
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = '2020-03-24T10:56:15.00'
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")
if previous_update < today:
today = previous_update - timedelta(days=-5)
TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")
下面的代码在将其解析为DateTime对象时,我遇到了一个问题..我被打到这里,并在stackoverflow和python论坛中引用了其他答案,但是仍然在这里有结构,无法解决问题... < / p>
如果有任何帮助修复将非常有帮助。谢谢。下面的代码使用lxml并获得支持以支持下面的代码将很有帮助。因为我已经为其他节点完成了。我的理解是Date变量的调用方式为None。
# <TransactionDate>
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = str(TransactionDate)
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")
if previous_update < today:
today = previous_update - timedelta(days=-5)
TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")
完整代码在下面
from lxml import etree
from datetime import datetime, timedelta
import random, string
doc = etree.parse(r'C:\Users\python.xml')
# <PolicyId> - Random generated policy number
Policy_Random_Choice = 'POL' + ''.join(random.choices(string.digits, k=6)) + 'NGJ'
# <TransactionDate>
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = str(TransactionDate)
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")
if previous_update < today:
today = previous_update - timedelta(days=-5)
TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")
#Parsing the Variables
replacements = [Policy_Random_Choice , TransactionDate ]
targets = doc.xpath('//ROW[PolicyId="POL000002NGJ"]')
for target in targets:
target.xpath('./PolicyId')[0].text = replacements[0]
target.xpath('.//TransactionDate')[0].text = replacements[1]
print(etree.tostring(doc).decode())
示例XML
<TABLE>
<ROW>
<PolicyId>POL000002NGJ</PolicyId>
<BusinessCoverageCode>COV00002D3X1</BusinessCoverageCode>
<TransactionDate>2020-03-23T10:56:15.00</TransactionDate>
</ROW>
<ROW>
<PolicyId>POL111111NGJ</PolicyId>
<BusinessCoverageCode>COV00002D3X4</BusinessCoverageCode>
<TransactionDate>2020-03-23T10:56:15.00</TransactionDate>
</ROW>
</TABLE>
答案 0 :(得分:0)
也许find方法是错误的。试试这个
VOLK_IMPLEMENTATION