找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 15839|回复: 6

[问题求助] powershell直接取zip文件夹下xml文件下某标签的值

[复制链接]
发表于 2022-8-1 13:22:48 | 显示全部楼层 |阅读模式
本帖最后由 小白龙 于 2022-8-1 13:33 编辑

我有一个名为A.zip的文件, 里面有个B.xml文件, 内容如下

powershell能直接取xml文件下的 version 标签的值[1.5]吗?  对xml不熟悉, 请求高手帮助, 谢谢


<package>
  <metadata>
    <id>www</id>
    <version>1.5</version>
  </metadata>
</package>
发表于 2022-8-1 15:59:52 | 显示全部楼层
  1. $xmldoc=[xml](get-content B.xml)
  2. $xmldoc.package.metadata.version
复制代码
 楼主| 发表于 2022-8-1 16:07:51 | 显示全部楼层
回复 2# flashercs


  多谢大佬, xml在zip文件中,   怎样直接获取内容?
发表于 2022-8-1 17:40:27 | 显示全部楼层
回复 3# 小白龙
  1. try {
  2.   # 文件名是case-sensitive
  3.   Add-Type -AssemblyName System.IO.Compression.FileSystem -ErrorAction Stop
  4.   $archive = [System.IO.Compression.ZipFile]::Open('.\b.zip', 'Read')
  5.   $entry = $archive.GetEntry('b.xml')
  6.   $stream = $entry.Open()
  7.   $xmldoc = New-Object System.Xml.XmlDocument
  8.   $xmldoc.Load($stream)
  9.   $xmldoc.package.metadata.version
  10. } finally {
  11.   if ($stream) {
  12.     $stream.Close()
  13.   }
  14.   if ($archive) {
  15.     $archive.Dispose()
  16.   }
  17. }
  18. trap {}
复制代码
ps5.1以上

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 高手

查看全部评分

 楼主| 发表于 2022-8-1 20:49:33 | 显示全部楼层
回复 4# flashercs


感谢,大侠,
如果zip中只知道有一个xml文件, 但是不知道文件名, 用这个方法, 还有解吗
发表于 2022-8-1 21:01:37 | 显示全部楼层
回复 5# 小白龙
  1. try {
  2.   # 文件名是case-sensitive
  3.   Add-Type -AssemblyName System.IO.Compression.FileSystem -ErrorAction Stop
  4.   $archive = [System.IO.Compression.ZipFile]::Open('.\b.zip', 'Read')
  5.   $xmldoc = New-Object System.Xml.XmlDocument
  6.   foreach ($entry in $archive.Entries) {
  7.     if ($entry.FullName.EndsWith('.xml', [System.StringComparison]::OrdinalIgnoreCase)) {
  8.       $stream = $entry.Open()
  9.       $xmldoc.Load($stream)
  10.       $xmldoc.package.metadata.version
  11.       $stream.Close()
  12.     }
  13.   }
  14. } finally {
  15.   if ($stream) {
  16.     $stream.Close()
  17.   }
  18.   if ($archive) {
  19.     $archive.Dispose()
  20.   }
  21. }
  22. trap {}
复制代码
 楼主| 发表于 2022-8-2 09:59:13 | 显示全部楼层
回复 6# flashercs

大佬太牛了, 实在佩服
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:45 , Processed in 0.018058 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表