Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以让lxml忽略根标记前后的非XML内容吗?_Python_Xml_Lxml - Fatal编程技术网

Python 我可以让lxml忽略根标记前后的非XML内容吗?

Python 我可以让lxml忽略根标记前后的非XML内容吗?,python,xml,lxml,Python,Xml,Lxml,我正试图使用lxml来处理一个文件,该文件在xml内容前后都可能有一些非xml垃圾,想象一下有人捕获了一个终端缓冲区,我有这样的东西: user@host: cat /tmp/log.xml <log> <foo>...</foo> <bar>.. ... </bar> </log> user@host: user@host:cat/tmp/log.xml ... .. ... user@host: 如果我将

我正试图使用lxml来处理一个文件,该文件在xml内容前后都可能有一些非xml垃圾,想象一下有人捕获了一个终端缓冲区,我有这样的东西:

user@host: cat /tmp/log.xml
<log>
  <foo>...</foo>
  <bar>..
...
</bar>

</log>

user@host:
user@host:cat/tmp/log.xml
...
..
...
user@host:

如果我将etree.parse交给文件名,它会阻塞开头的内容。我可以删除第一组线,直到找到一条以“开头的线为止。最多可以从前面清除所有不是开口角括号的线,从末尾清除所有不是闭合角括号的线:

data = data[data.find('<'):data.rfind('>')]
data=data[data.find(“”)]
但是,如果在实际XML数据之前的开始处有任何开始的尖括号,并且在数据的末尾有任何额外的结束尖括号,那么这将很容易失败。这在shell环境中并不少见


如果你只是拒绝任何这样的输入,你会容易得多。

这里是方便和正确之间平衡的另一点:

import re

xml = re.search(r"<(\w+).*</\1>", console_output, flags=re.DOTALL).group()
重新导入

xml=re.search(r"如果有人在开始或结束时预先添加了一些几乎有效的XML怎么办?你在哪里划界?我在一个明显的打开的根标记之前划界,在关闭同一个根标记之后划界。对于我试图解决的情况,这是合理的。我主要希望在前后使用shell命令和提示。你的观点是什么这是一个失败的原因,我应该坚持一个完全有效的XML文档?我是说这是一个失败的原因,你应该专注于有效的XML。:-)最多你可以清理所有不是开始的东西
我最终这样做了,它处理了我需要处理的常见情况,这是提取第一个看起来像根标记的东西及其所有内容。