XML格式的python HTTP响应数据

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> 我

我有一个HTTP请求Get,我知道它的响应数据如下所示

<?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]。文本是下一行