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 - Fatal编程技术网

如何使用python删除xml文件的子文件?

如何使用python删除xml文件的子文件?,python,xml,Python,Xml,我有一个xml文件,它有一组特定的子行,在运行python代码时应该删除这些子行 下面显示的行是我的xml代码 <?xml version="1.0" encoding="utf-8" ?> <visualization protocolVersion="10.4.0.0"> <globalSection/> <coreObjectDefinition type="displayDefinition"> <version ty

我有一个xml文件,它有一组特定的子行,在运行python代码时应该删除这些子行

下面显示的行是我的xml代码

<?xml version="1.0" encoding="utf-8" ?>
<visualization protocolVersion="10.4.0.0">
  <globalSection/>
  <coreObjectDefinition type="displayDefinition">
    <version type="version" value="10.4.0.0"/>
    <width>1920</width>
    <height>810</height>
    <referenceCheck>2</referenceCheck>
    <defaultBgColor type="colorSet" r="255" g="255" b="255"/>
    <defaultFgColor type="colorSet" r="0" g="0" b="0"/>
    <defaultFont type="font" name="Tahoma" size="16" underline="false" strikethrough="false"/>
    <defaultStroke type="stroke" width="1.0"/>
    <grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="8" horizontalSnapInterval="8" onTop="false">
      <color type="colorSet" r="0" g="0" b="0"/>
    </grid>
    <revisionHistory type="revisionHistory">
      <revision type="revision" who="ADMIN" when="2020.05.03 09:46:15.566 CEST" what="Created" where="CPC-A0668-4138"/>
    </revisionHistory>
    <blinkDelay>500</blinkDelay>
    <mousePassThrough>false</mousePassThrough>
    <visibilityGroup type="componentData">
      <htmlId>2</htmlId>
      <name>Overview</name>
      <description>Always shown</description>
      <minimumZoomEnabled>true</minimumZoomEnabled>
      <minimumZoomFactor>10.0</minimumZoomFactor>
    </visibilityGroup>
    <visibilityGroup type="componentData">
      <htmlId>3</htmlId>
      <name>Rough</name>
      <description>Shown when viewing viewing a large area</description>
      <minimumZoomEnabled>true</minimumZoomEnabled>
      <minimumZoomFactor>25.0</minimumZoomFactor>
    </visibilityGroup>
    <visibilityGroup type="componentData">
      <htmlId>4</htmlId>
      <name>Standard</name>
      <description>Shown when using the default view setting</description>
      <minimumZoomEnabled>true</minimumZoomEnabled>
      <minimumZoomFactor>100.0</minimumZoomFactor>
    </visibilityGroup>
    <visibilityGroup type="componentData">
      <htmlId>5</htmlId>
      <name>Detail</name>
      <description>Shown only when viewing a small area</description>
      <minimumZoomEnabled>true</minimumZoomEnabled>
      <minimumZoomFactor>400.0</minimumZoomFactor>
    </visibilityGroup>
    <visibilityGroup type="componentData">
      <htmlId>6</htmlId>
      <name>Intricacies</name>
      <description>Shown only when viewing a very small area</description>
      <minimumZoomEnabled>true</minimumZoomEnabled>
      <minimumZoomFactor>1000.0</minimumZoomFactor>
    </visibilityGroup>
    <visualizationLayer type="componentData">
      <htmlId>1</htmlId>
      <name>Layer1</name>
    </visualizationLayer>
    <componentCountHint>1</componentCountHint>
    <ellipse type="componentData" x="851.99896" y="300.00006" top="92.000046" bottom="91.99985" left="99.99896" right="100.001526">
      <htmlId>7</htmlId>
      <stroke type="stroke" width="1.0"/>
      <fillPaint type="paint">
        <paint type="colorSet" r="255" g="255" b="255"/>
      </fillPaint>
      **<data type="data">
        <action type="actionConnectTo">
          <property type="property" name="ellipse.visible"/>
          <filter type="filter">
            <value>0.0</value>
          </filter>
          <connection type="connection">
            <direction>1</direction>
            <itemName>AOG.Templates.Alarm</itemName>
            <itemId>2.1.3.0.0.2.1.8</itemId>
          </connection>
        </action>
      </data>**
    </ellipse>
  </coreObjectDefinition>
</visualization>

不幸的是,您不能使用ElementTree访问元素的子元素。每个节点只有指向其直接子节点的“指针”。因此,为了访问
节点并将其删除,您应该从其直接父节点引用它

我会这样做:

for d in root.findall('coreObjectDefinition'):
    for e in d.findall('ellipse'):
        for f in e.findall('data'):
            e.remove(f)
此库的语法允许您递归搜索树,因此您可以使用
root.findall('.//data')
查找元素。因此,上述代码的较短版本为:

for d in root.findall('.//ellipse'):
    for e in d.findall('data'):
        d.remove(e)
试试这个

from simplified_scrapy import SimplifiedDoc,utils,req
html = '''Your xml'''
doc = SimplifiedDoc(html)
data = doc.select('data@type=data') # Get the element
data.repleaceSelf("") # Remove it
print(doc.html) # This is what you want

“无法使用ElementTree访问元素的子元素”。事实并非如此。例如,您可以使用
elem.find(“child/subchild”)
for d in root.findall('.//ellipse'):
    for e in d.findall('data'):
        d.remove(e)
from simplified_scrapy import SimplifiedDoc,utils,req
html = '''Your xml'''
doc = SimplifiedDoc(html)
data = doc.select('data@type=data') # Get the element
data.repleaceSelf("") # Remove it
print(doc.html) # This is what you want