【问题标题】:BeautifulSoup XML Only printing first lineBeautifulSoup XML 仅打印第一行
【发布时间】:2012-03-26 05:17:05
【问题描述】:

我正在使用 BeautifulSoup4(和 lxml)解析 XML 文件,由于某种原因,当我打印 soup.prettify() 时它只打印第一行:

from bs4 import BeautifulSoup

f = open('xmlDoc.xml', "r")

soup = BeautifulSoup(f, 'xml')

print soup.prettify()

#>>> <?xml version="1.0" encoding="utf-8"?>

知道为什么它没有抓住一切吗?

更新:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!-- Data Junction generated file.
Macro type "1000" is reserved. -->
<djmacros>
  <macro name="Test" type="5000" value="TestValue">
    <description>test</description>
  </macro>
  <macro name="AnotherTest" type="0" value="TestValue2"/>
  <macro name="TestLocation" type="1000" value="C:\RandomLocation">
    <description> </description>
  </macro>
<djmacros>

【问题讨论】:

  • 我也遇到了类似的问题。我怀疑它实际上没有捕获任何东西。 (如果您在格式错误的 XML 上尝试您的代码,我希望它仍将仅返回 xml 标头)。
  • 嗯,我刚刚尝试剪切和粘贴您的 xml。对我来说似乎工作正常。你用的是什么版本?

标签: python xml beautifulsoup


【解决方案1】:

文件位置在EOF:

>>> soup = BeautifulSoup("", 'xml')
>>> soup.prettify()
'<?xml version="1.0" encoding="utf-8">\n'

或者内容是无效的xml:

>>> soup = BeautifulSoup("no <root/> element", 'xml')
>>> soup.prettify()
'<?xml version="1.0" encoding="utf-8">\n'

【讨论】:

  • @moreisee: 执行f.seek(0) 将文件倒回到开头。您可能已经使用过它(使用未显示的代码)。
  • 这就是所有存在的python代码。刚刚用 BeautifulSoup 弄湿了我的脚。编辑:无论如何都试过了,没有运气。
  • @moreisee:将文件读入字符串s = f.read()。检查repr(s) 以查看是否有任何异常('\0' 字节;尽管声明了 utf-8,但 BOM 标记;它应该与任何行分隔符一起使用,但请检查它是什么('\r', '\n')无论如何)。
  • @J.F.Sebastion 不,该文件仅使用 \n。我还将 xml 复制并粘贴到字符串中,而不是从文件中读取,同样的问题。
  • @moreisee:你试过click on the link吗?
【解决方案2】:

根据 J.F.Sebastion 的回答,XML 无效。

您的最终标签不正确:

<djmacros>

正确的标签是:

</djmacros>

您可以使用 XML 验证器确认这一点。比如http://www.w3schools.com/xml/xml_validator.asp

【讨论】:

    【解决方案3】:

    如果编码是 UTF-8-BOM 而不是 UTF-8,即使 XML 在其他方面有效,它也可能会出现问题。

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 2023-03-28
      • 2012-12-05
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2020-07-11
      相关资源
      最近更新 更多