Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 如何使用多个根元素解析xml_Python_Xml_Python 2.7_Parsing - Fatal编程技术网

Python 如何使用多个根元素解析xml

Python 如何使用多个根元素解析xml,python,xml,python-2.7,parsing,Python,Xml,Python 2.7,Parsing,我需要解析var和group根元素 代码 错误 xml.etree.ElementTree.ParseError:文档元素后的垃圾:第17行,第0列 示例XML <var name="BAD_WORDS">core_dumped|failure|error|attack| bad |illegal |denied|refused|unauthorized|fatal|failed|Segmentation Fault|Corrupted</var> <group

我需要解析var和group根元素

代码

错误

xml.etree.ElementTree.ParseError:文档元素后的垃圾:第17行,第0列

示例XML

<var name="BAD_WORDS">core_dumped|failure|error|attack| bad |illegal |denied|refused|unauthorized|fatal|failed|Segmentation Fault|Corrupted</var>

<group name="syslog,errors,">
  <rule id="1001" level="2">
    <match>^Couldn't open /etc/securetty</match>
    <description>File missing. Root access unrestricted.</description>
    <group>pci_dss_10.2.4,gpg13_4.1,</group>
  </rule>

  <rule id="1002" level="2">
    <match>$BAD_WORDS</match>
    <options>alert_by_email</options>
    <description>Unknown problem somewhere in the system.</description>
    <group>gpg13_4.3,</group>
  </rule>
</group>
我试着回答了关于stackoverflow的其他几个问题,但都没有效果


我知道原因,因为它没有被解析,人们通常尝试黑客。在我看来,在XML中有多个根元素是一个非常常见的用例,而ET解析库中必须有一些东西来完成这项工作。

如注释中所述,XML文件不能有多个根。就这么简单

如果您确实以这种格式接收/存储数据,那么它不是正确的XML。你可以考虑用假标签来包围你所拥有的东西,例如

import xml.etree.ElementTree as ET

with open("0020-syslog_rules.xml", "r") as inputFile: 
  fileContent = inputFile.read()
  root = ET.fromstring("<fake>" + fileContent +"</fake>")
  print(root)

如注释中所述,XML文件不能有多个根。就这么简单

如果您确实以这种格式接收/存储数据,那么它不是正确的XML。你可以考虑用假标签来包围你所拥有的东西,例如

import xml.etree.ElementTree as ET

with open("0020-syslog_rules.xml", "r") as inputFile: 
  fileContent = inputFile.read()
  root = ET.fromstring("<fake>" + fileContent +"</fake>")
  print(root)

实际上,示例数据不是格式良好的XML文档,而是格式良好的XML实体。一些XML解析器可以选择接受实体而不是文档,在XPath 3.1中,可以使用parse XML fragment函数来解析此内容

解析这样的片段的另一种方法是创建一个包装器文档,将其作为外部实体引用:

<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "fragment.xml">
]>
<wrapper>&e;</wrapper>

然后将此包装器文档作为XML解析器的输入。

实际上,示例数据不是格式良好的XML文档,而是格式良好的XML实体。一些XML解析器可以选择接受实体而不是文档,在XPath 3.1中,可以使用parse XML fragment函数来解析此内容

解析这样的片段的另一种方法是创建一个包装器文档,将其作为外部实体引用:

<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "fragment.xml">
]>
<wrapper>&e;</wrapper>

然后将此包装器文档作为输入提供给XML解析器。

。在我看来,在XML中有多个根元素是一个非常常见的用例,-事实并非如此。根据XML的定义,它总是只有一个根元素。在我看来,在XML中有多个根元素是一个非常常见的用例,-事实并非如此。根据XML的定义,它总是只有一个根元素