在SelectSingleNode上使用Python解析XML
使用以下XML数据,我希望获得通过python代码调用的相关键的值。我想在不使用任何第三方库的情况下完成这项任务在SelectSingleNode上使用Python解析XML,python,xml,xpath,ironpython,Python,Xml,Xpath,Ironpython,使用以下XML数据,我希望获得通过python代码调用的相关键的值。我想在不使用任何第三方库的情况下完成这项任务 <Userinfo> <UserData> <item key="DateOfBirth" value="19851103" /> <item key="FirstName" value="John" /> <item key="LastName" value="Dicaprio" />
<Userinfo>
<UserData>
<item key="DateOfBirth" value="19851103" />
<item key="FirstName" value="John" />
<item key="LastName" value="Dicaprio" />
<item key="Gender" value="M" />
<item key="Email" value="john@abc.com" />
<item key="ContactNo" value="235625341" />
</UserData>
</Userinfo>
使用以下代码,它不会在SelectSingleNode调用中检索相关键的值。提前感谢。我对IronPython不是很确定,但Python的核心库包括一些其他独立于平台的XML解析器。。。下面是一个使用
xml.etree.ElementTree
的示例
import datetime
import xml.etree.ElementTree as ET
xml = '''<Userinfo>
<UserData>
<item key="DateOfBirth" value="19851103" />
<item key="FirstName" value="John" />
<item key="LastName" value="Dicaprio" />
<item key="Gender" value="M" />
<item key="Email" value="john@abc.com" />
<item key="ContactNo" value="235625341" />
</UserData>
</Userinfo>'''
root = ET.fromstring(xml)
fname = root.findall(".//item[@key='FirstName']")[0].get('value')
dob = datetime.datetime.strptime(
root.findall(".//item[@key='DateOfBirth']")[0].get('value'),
'%Y%m%d')
导入日期时间
将xml.etree.ElementTree作为ET导入
xml=“”
'''
root=ET.fromstring(xml)
fname=root.findall(“.//项[@key='FirstName']”[0]。获取('value'))
dob=datetime.datetime.strtime(
root.findall(“.//item[@key='DateOfBirth']”[0].get('value'),
“%Y%m%d”)
我对IronPython不是很确定,但Python的核心库包括一些其他独立于平台的XML解析器。。。下面是一个使用xml.etree.ElementTree
的示例
import datetime
import xml.etree.ElementTree as ET
xml = '''<Userinfo>
<UserData>
<item key="DateOfBirth" value="19851103" />
<item key="FirstName" value="John" />
<item key="LastName" value="Dicaprio" />
<item key="Gender" value="M" />
<item key="Email" value="john@abc.com" />
<item key="ContactNo" value="235625341" />
</UserData>
</Userinfo>'''
root = ET.fromstring(xml)
fname = root.findall(".//item[@key='FirstName']")[0].get('value')
dob = datetime.datetime.strptime(
root.findall(".//item[@key='DateOfBirth']")[0].get('value'),
'%Y%m%d')
导入日期时间
将xml.etree.ElementTree作为ET导入
xml=“”
'''
root=ET.fromstring(xml)
fname=root.findall(“.//项[@key='FirstName']”[0]。获取('value'))
dob=datetime.datetime.strtime(
root.findall(“.//item[@key='DateOfBirth']”[0].get('value'),
“%Y%m%d”)
当前循环的中的XPath表达式都是相对于文档节点的,因为它以/
开头。要使其相对于上下文元素(在本例中,上下文元素由itemNode
引用),可以添加前面的
或完全删除/
:
for itemNode in node:
counts += 1
# here are some ways to make your XPath heeds the context element `itemNode`
fullname = xstr(itemNode.SelectSingleNode("./item[@key='FirstName']/@value",nsmgr))
empname = xstr(itemNode.SelectSingleNode("item[@key='LastName']/@value",nsmgr))
cardcountry = xstr(itemNode.SelectSingleNode("self::*/item[@key='Email']/@value",nsmgr))
当前,for
循环的中的XPath表达式都是相对于文档节点的,因为它是从/
开始的。要使其相对于上下文元素(在本例中,上下文元素由itemNode
引用),可以添加前面的
或完全删除/
:
for itemNode in node:
counts += 1
# here are some ways to make your XPath heeds the context element `itemNode`
fullname = xstr(itemNode.SelectSingleNode("./item[@key='FirstName']/@value",nsmgr))
empname = xstr(itemNode.SelectSingleNode("item[@key='LastName']/@value",nsmgr))
cardcountry = xstr(itemNode.SelectSingleNode("self::*/item[@key='Email']/@value",nsmgr))
在我发布之前,我检查了一下ElementTree是否包含在IronPython中(看起来确实如此)。为什么它在这里不起作用?我得到了一个错误,“LightException”对象没有属性“etree”,在我发布之前,我检查了一下ElementTree是否包含在IronPython中(看起来确实是)。为什么它在这里不起作用?我得到了这个错误,“LightException”对象没有属性“etree”实际XML是否有名称空间,特别是默认名称空间?实际XML是否有名称空间,特别是默认名称空间?