如何基于父标记中的给定属性获取文件名和路径

烈焰

我想更改以下代码以获取,file_names并且file_paths仅当fastboot="true"父标记中存在属性,我才提供当前的输出和预期的输出,有人可以提供如何执行操作的指南吗?

import sys
import os
import string
from xml.dom import minidom

if __name__ == '__main__':
    meta_contents = minidom.parse("fast.xml")
    builds_flat = meta_contents.getElementsByTagName("builds_flat")[0]
    build_nodes = builds_flat.getElementsByTagName("build")
    for build in build_nodes:
          bid_name = build.getElementsByTagName("name")[0]
          print "Checking if this is cnss related image... : \n"+bid_name.firstChild.data
          if (bid_name.firstChild.data == 'apps'):
             file_names = build.getElementsByTagName("file_name")
             file_paths = build.getElementsByTagName("file_path")
             print "now files paths...\n"
             for fn,fp in zip(file_names,file_paths):
                if (not fp.firstChild.nodeValue.endswith('/')):
                   fp.firstChild.nodeValue = fp.firstChild.nodeValue + '/'
                full_path = fp.firstChild.nodeValue+fn.firstChild.nodeValue
                print "file-to-copy: "+full_path
             break

输入XML:

  <builds_flat>
    <build>
      <name>apps</name>
      <file_ref ignore="true" minimized="true">
        <file_name>adb.exe</file_name>
        <file_path>LINUX/android/vendor/qcom/proprietary/usb/host/windows/prebuilt/</file_path>
      </file_ref>
      <file_ref ignore="true" minimized="true">
        <file_name>system.img</file_name>
        <file_path>LINUX/android/out/target/product/msmcobalt/secondary-boot/</file_path>
      </file_ref>
      <download_file cmm_file_var="APPS_BINARY" fastboot_rumi="boot" fastboot="true" minimized="true">
        <file_name>boot.img</file_name>
        <file_path>LINUX/android/out/target/product/msmcobalt/</file_path>
      </download_file>
      <download_file sparse_image_path="true" fastboot_rumi="abl" fastboot="true" minimized="true">
        <file_name>abl.elf</file_name>
        <file_path>LINUX/android/out/target/product/msmcobalt/</file_path>
      </download_file>      
    </build>
  </builds_flat>

输出:-

...............
now files paths...

file-to-copy: LINUX/android/vendor/qcom/proprietary/usb/host/windows/prebuilt/adb.exe
file-to-copy: LINUX/android/out/target/product/msmcobalt/secondary-boot/system.img
file-to-copy: LINUX/android/out/target/product/msmcobalt/boot.img
file-to-copy: LINUX/android/out/target/product/msmcobalt/abl.elf

预期:

now files paths...

........
file-to-copy: LINUX/android/out/target/product/msmcobalt/boot.img
file-to-copy: LINUX/android/out/target/product/msmcobalt/abl.elf
琉璃苣

我想到的是一种很快而又肮脏的东西,它使用的事实是只有download_file元素才具有fastboot属性,对吗?如果是这种情况,您始终可以获取type的子代download_file并过滤其fastboot属性不是的子代"true"

import os
from xml.dom import minidom

if __name__ == '__main__':
    meta_contents = minidom.parse("fast.xml")
    for elem in meta_contents.getElementsByTagName('download_file'):
        if elem.getAttribute('fastboot') == "true":
            path = elem.getElementsByTagName('file_path')[0].firstChild.nodeValue
            file_name = elem.getElementsByTagName('file_name')[0].firstChild.nodeValue
            print os.path.join(path, file_name)

使用您提供的样本输出:

$ python ./stack_034.py
LINUX/android/out/target/product/msmcobalt/boot.img
LINUX/android/out/target/product/msmcobalt/abl.elf

不用说...因为没有.xsd文件(minidom尽管也没有关系,但是)只得到字符串(没有类型安全性),并且这仅适用于示例中显示的结构(您可能希望添加一些内容)那里有额外的检查,这是我的意思)

编辑:根据此答案中的注释:

要获取<build>其中包含<name>具有value属性的元素apps,您可以:找到该<name>标签(其值为字符串的标签apps),然后移至父节点(将您置于build元素中),然后按上述步骤进行操作:

if __name__ == '__main__':
    meta_contents = minidom.parse("fast.xml")
    for elem in meta_contents.getElementsByTagName('name'):
        if elem.firstChild.nodeValue == "apps":
            apps_build = elem.parentNode
            for elem in apps_build.getElementsByTagName('download_file'):
                if elem.getAttribute('fastboot') == "true":
                    path = elem.getElementsByTagName('file_path')[0].firstChild.nodeValue
                    file_name = elem.getElementsByTagName('file_name')[0].firstChild.nodeValue
                    print os.path.join(path, file_name)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅从给定路径获取文件名

来自分类Dev

如何从Android中的文件路径获取文件名

来自分类Dev

如何基于JavaScript中的事件对象获取文件名?

来自分类Dev

如何基于JavaScript中的事件对象获取文件名?

来自分类Dev

给定文件名获取其绝对路径

来自分类Dev

获取目录路径中的文件名

来自分类Dev

获取URL的文件名和父文件夹

来自分类Dev

在Lua中给定文件名的情况下,如何获得目录路径,这与平台无关

来自分类Dev

从bash中的完整文件路径获取父目录名称和文件名而没有扩展名?

来自分类Dev

从路径获取文件名

来自分类Dev

如何从给定的文件夹中获取图像文件名

来自分类Dev

如何从给定的文件夹中获取图像文件名

来自分类Dev

PowerShell获取文件名,文件夹中没有路径和TSV行数

来自分类Dev

从 Naught 和 Oreo 设备中的 mediastore 获取文件名和路径

来自分类Dev

如何使用jQuery从输入类型文件中获取选定的文件名和文件路径

来自分类Dev

如何基于R中其他文件中的名称获取文件名?

来自分类Dev

如何从存储在HDFS分布式缓存中的文件的路径中获取文件名

来自分类Dev

如何从没有扩展名的路径中获取特定文件名python

来自分类常见问题

如何快速从文件路径获取文件名

来自分类Dev

如何拆分文件路径以获取文件名?

来自分类Dev

获取curl -o保存输出的文件名和路径

来自分类Dev

如何获取在Java程序中打开的完整文件名和文件路径?

来自分类Dev

如何从具有可变文件名的查找中获取文件路径

来自分类Dev

如何在VB.net的DragDrop中分别获取文件名和路径?

来自分类Dev

如何从给定目录中的文件名中删除前缀和后缀?

来自分类Dev

如何在Python中从具有完整路径的变量中获取文件名?

来自分类Dev

如何使用C ++从整个路径获取文件名

来自分类Dev

如何从Shell变量获取路径的文件名部分

来自分类Dev

如何从 ls 获取全名、路径和文件名?

Related 相关文章

  1. 1

    仅从给定路径获取文件名

  2. 2

    如何从Android中的文件路径获取文件名

  3. 3

    如何基于JavaScript中的事件对象获取文件名?

  4. 4

    如何基于JavaScript中的事件对象获取文件名?

  5. 5

    给定文件名获取其绝对路径

  6. 6

    获取目录路径中的文件名

  7. 7

    获取URL的文件名和父文件夹

  8. 8

    在Lua中给定文件名的情况下,如何获得目录路径,这与平台无关

  9. 9

    从bash中的完整文件路径获取父目录名称和文件名而没有扩展名?

  10. 10

    从路径获取文件名

  11. 11

    如何从给定的文件夹中获取图像文件名

  12. 12

    如何从给定的文件夹中获取图像文件名

  13. 13

    PowerShell获取文件名,文件夹中没有路径和TSV行数

  14. 14

    从 Naught 和 Oreo 设备中的 mediastore 获取文件名和路径

  15. 15

    如何使用jQuery从输入类型文件中获取选定的文件名和文件路径

  16. 16

    如何基于R中其他文件中的名称获取文件名?

  17. 17

    如何从存储在HDFS分布式缓存中的文件的路径中获取文件名

  18. 18

    如何从没有扩展名的路径中获取特定文件名python

  19. 19

    如何快速从文件路径获取文件名

  20. 20

    如何拆分文件路径以获取文件名?

  21. 21

    获取curl -o保存输出的文件名和路径

  22. 22

    如何获取在Java程序中打开的完整文件名和文件路径?

  23. 23

    如何从具有可变文件名的查找中获取文件路径

  24. 24

    如何在VB.net的DragDrop中分别获取文件名和路径?

  25. 25

    如何从给定目录中的文件名中删除前缀和后缀?

  26. 26

    如何在Python中从具有完整路径的变量中获取文件名?

  27. 27

    如何使用C ++从整个路径获取文件名

  28. 28

    如何从Shell变量获取路径的文件名部分

  29. 29

    如何从 ls 获取全名、路径和文件名?

热门标签

归档