XML格式的python HTTP响应数据
我有一个HTTP请求Get,我知道它的响应数据如下所示XML格式的python HTTP响应数据,python,xml,Python,Xml,我有一个HTTP请求Get,我知道它的响应数据如下所示 <?xml version="1.0" encoding="utf-8"?> <TestSpec xmlns="TestSpec.xsd"> <Tests> <TestCase> <TestCase>abc</TestCase> </TestCase> </Tests> </TestSpec> 我
<?xml version="1.0" encoding="utf-8"?>
<TestSpec xmlns="TestSpec.xsd">
<Tests>
<TestCase>
<TestCase>abc</TestCase>
</TestCase>
</Tests>
</TestSpec>
我怎样才能得到我试过的那些数据
print ("\ntree= "+ str(tree.TestCase))
但是如果g0.text.encode'utf8'返回您给出的示例XML字符串,那么就不需要使用HTML解析器了。试着这样做:
tests = etree.fromstring(g0.text.encode('utf8'))[0] # Notice the "[0]" here
for testCase in tests.findall("{TestSpec.xsd}TestCase"): # Notice the namespace here
print(testCase[0].text)
<?xml version="1.0" encoding="utf-8"?>
<TestSpec xmlns="TestSpec.xsd">
<Tests>
<TestCase>
<TestCase>abc</TestCase>
</TestCase>
<TestCase>
<TestCase>def</TestCase>
</TestCase>
<TestCase>
<TestCase>ghi</TestCase>
</TestCase>
</Tests>
</TestSpec>
<?xml version="1.0" encoding="utf-8"?>
<TestSpec xmlns="TestSpec.xsd">
<Tests>
<TestCase>
<TestCase>abc</TestCase>
<TestCase>def</TestCase>
<TestCase>ghi</TestCase>
</TestCase>
</Tests>
</TestSpec>
for outerTestCaseTag in tests.findall("{TestSpec.xsd}TestCase"):
for innerTestCase in outerTestCaseTag.findall("{TestSpec.xsd}TestCase"):
print(innerTestCase.text)
在上面的代码中,我使用[0]获取根元素的第0个子元素,即标记。for循环使用findall,它直接返回Tests标记下与给定标记名匹配的所有子级。注意,我在标记名前面的括号中包含了顶级标记中的名称空间。在本例中,findall返回所有外部标记。在循环中,我再次使用了[0],它是标记的第一个子项;在这种情况下,内部。最后,text是包含abc的属性
这将适用于如下XML:
tests = etree.fromstring(g0.text.encode('utf8'))[0] # Notice the "[0]" here
for testCase in tests.findall("{TestSpec.xsd}TestCase"): # Notice the namespace here
print(testCase[0].text)
<?xml version="1.0" encoding="utf-8"?>
<TestSpec xmlns="TestSpec.xsd">
<Tests>
<TestCase>
<TestCase>abc</TestCase>
</TestCase>
<TestCase>
<TestCase>def</TestCase>
</TestCase>
<TestCase>
<TestCase>ghi</TestCase>
</TestCase>
</Tests>
</TestSpec>
<?xml version="1.0" encoding="utf-8"?>
<TestSpec xmlns="TestSpec.xsd">
<Tests>
<TestCase>
<TestCase>abc</TestCase>
<TestCase>def</TestCase>
<TestCase>ghi</TestCase>
</TestCase>
</Tests>
</TestSpec>
for outerTestCaseTag in tests.findall("{TestSpec.xsd}TestCase"):
for innerTestCase in outerTestCaseTag.findall("{TestSpec.xsd}TestCase"):
print(innerTestCase.text)
第一个[0]获取标记也是如此。我确信有更好的pythonic循环理解来改进嵌套循环,但这是一般的想法。我的情况是你在上面写的第二个,所以我尝试了[0]它不起作用谢谢你的帮助我设法让它起作用,tests=etree.fromstring0.text.encode'utf8'[0]注意这里的[0]用于tests.findall中的testCase{TestSpec.xsd}TestCase:注意这里的名称空间printtestCase[0]。文本是答案,结果是->TestCase[1]。文本是下一行