返回列表 发帖

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

本帖最后由 小白龙 于 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>

$xmldoc=[xml](get-content B.xml)
$xmldoc.package.metadata.versionCOPY
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


  多谢大佬, xml在zip文件中,   怎样直接获取内容?

TOP

回复 3# 小白龙
try {
  # 文件名是case-sensitive
  Add-Type -AssemblyName System.IO.Compression.FileSystem -ErrorAction Stop
  $archive = [System.IO.Compression.ZipFile]::Open('.\b.zip', 'Read')
  $entry = $archive.GetEntry('b.xml')
  $stream = $entry.Open()
  $xmldoc = New-Object System.Xml.XmlDocument
  $xmldoc.Load($stream)
  $xmldoc.package.metadata.version
} finally {
  if ($stream) {
    $stream.Close()
  }
  if ($archive) {
    $archive.Dispose()
  }
}
trap {}COPY
ps5.1以上
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 4# flashercs


感谢,大侠,
如果zip中只知道有一个xml文件, 但是不知道文件名, 用这个方法, 还有解吗

TOP

回复 5# 小白龙
try {
  # 文件名是case-sensitive
  Add-Type -AssemblyName System.IO.Compression.FileSystem -ErrorAction Stop
  $archive = [System.IO.Compression.ZipFile]::Open('.\b.zip', 'Read')
  $xmldoc = New-Object System.Xml.XmlDocument
  foreach ($entry in $archive.Entries) {
    if ($entry.FullName.EndsWith('.xml', [System.StringComparison]::OrdinalIgnoreCase)) {
      $stream = $entry.Open()
      $xmldoc.Load($stream)
      $xmldoc.package.metadata.version
      $stream.Close()
    }
  }
} finally {
  if ($stream) {
    $stream.Close()
  }
  if ($archive) {
    $archive.Dispose()
  }
}
trap {}COPY
微信:flashercs
QQ:49908356

TOP

回复 6# flashercs

大佬太牛了, 实在佩服

TOP

返回列表