在SelectSingleNode上使用Python解析XML

在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" />

使用以下XML数据,我希望获得通过python代码调用的相关键的值。我想在不使用任何第三方库的情况下完成这项任务

<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是否有名称空间,特别是默认名称空间?