解析 XML 个包含嵌套元素的文件
Parse XML File with nested Elements
我正在尝试使用如下所示的嵌套元素导出和 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<GetCategoriesResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2015-11-16T03:51:35.809Z</Timestamp>
<Ack>Success</Ack>
<Version>927</Version>
<Build>E927_CORE_API_17590338_R1</Build>
<CategoryArray>
<Category>
<BestOfferEnabled>true</BestOfferEnabled>
<AutoPayEnabled>true</AutoPayEnabled>
<CategoryID>20081</CategoryID>
<CategoryLevel>1</CategoryLevel>
<CategoryName>Antiques</CategoryName>
<CategoryParentID>20081</CategoryParentID>
</Category>
</CategoryArray>
<CategoryCount>18282</CategoryCount>
<UpdateTime>2015-09-01T22:57:09.000Z</UpdateTime>
<CategoryVersion>113</CategoryVersion>
<ReservePriceAllowed>true</ReservePriceAllowed>
<MinimumReservePrice>0.0</MinimumReservePrice>
</GetCategoriesResponse>
我正在尝试使用 python 元素树访问标签 的内容 我尝试了不同的方法,例如:
import xml.etree.ElementTree as ET
xtree = ET.parse("categories.xml")
xroot = xtree.getroot()
for node in xroot.findall('CategoryArray'):
for snode in node.findall('Category'):
categoryName = snode.find("CategoryName").text
categoryLevel = snode.find("CategoryLevel").text
categoryParentID = snode.find('CategoryParentID').text
print(categoryName, categoryLevel, categoryParentID)
但是它没有输出任何东西,我做错了什么?
Namespaces(ns) 是这里的关键,因此您需要考虑 ns。更多documentation请参考
import xml.etree.ElementTree as ET
xtree = ET.parse("categories.xml")
xroot = xtree.getroot()
ns = {'myns': 'urn:ebay:apis:eBLBaseComponents'} # define the namesapce
for node in xroot.findall('myns:CategoryArray',ns): # and then find them based on ns
for snode in node.findall('myns:Category',ns):
categoryName = snode.find("myns:CategoryName",ns).text
categoryLevel = snode.find("myns:CategoryLevel",ns).text
categoryParentID = snode.find('myns:CategoryParentID',ns).text
print(categoryName, categoryLevel, categoryParentID)
我正在尝试使用如下所示的嵌套元素导出和 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<GetCategoriesResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2015-11-16T03:51:35.809Z</Timestamp>
<Ack>Success</Ack>
<Version>927</Version>
<Build>E927_CORE_API_17590338_R1</Build>
<CategoryArray>
<Category>
<BestOfferEnabled>true</BestOfferEnabled>
<AutoPayEnabled>true</AutoPayEnabled>
<CategoryID>20081</CategoryID>
<CategoryLevel>1</CategoryLevel>
<CategoryName>Antiques</CategoryName>
<CategoryParentID>20081</CategoryParentID>
</Category>
</CategoryArray>
<CategoryCount>18282</CategoryCount>
<UpdateTime>2015-09-01T22:57:09.000Z</UpdateTime>
<CategoryVersion>113</CategoryVersion>
<ReservePriceAllowed>true</ReservePriceAllowed>
<MinimumReservePrice>0.0</MinimumReservePrice>
</GetCategoriesResponse>
我正在尝试使用 python 元素树访问标签 的内容 我尝试了不同的方法,例如:
import xml.etree.ElementTree as ET
xtree = ET.parse("categories.xml")
xroot = xtree.getroot()
for node in xroot.findall('CategoryArray'):
for snode in node.findall('Category'):
categoryName = snode.find("CategoryName").text
categoryLevel = snode.find("CategoryLevel").text
categoryParentID = snode.find('CategoryParentID').text
print(categoryName, categoryLevel, categoryParentID)
但是它没有输出任何东西,我做错了什么?
Namespaces(ns) 是这里的关键,因此您需要考虑 ns。更多documentation请参考
import xml.etree.ElementTree as ET
xtree = ET.parse("categories.xml")
xroot = xtree.getroot()
ns = {'myns': 'urn:ebay:apis:eBLBaseComponents'} # define the namesapce
for node in xroot.findall('myns:CategoryArray',ns): # and then find them based on ns
for snode in node.findall('myns:Category',ns):
categoryName = snode.find("myns:CategoryName",ns).text
categoryLevel = snode.find("myns:CategoryLevel",ns).text
categoryParentID = snode.find('myns:CategoryParentID',ns).text
print(categoryName, categoryLevel, categoryParentID)