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

[问题求助] PowerShell在xml文件中根据某标签属性值删除其所在的父结点

[复制链接]
 楼主| 发表于 2021-12-27 19:19:54 | 显示全部楼层
回复 30# idwma
这样解析时不报错了

    [xml]$a = Get-Content ".\蓝莲花.musicxml" -Encoding UTF8
 楼主| 发表于 2021-12-27 19:22:30 | 显示全部楼层
回复 30# idwma

试了一下, 这样可以找到爷结点, 但是还是删除不干净, 还是留下了标签

$b = $a.SelectSingleNode("//rehearsal[text()='ABC']")

$b.ParentNode.ParentNode.RemoveAll()
 楼主| 发表于 2021-12-27 19:24:51 | 显示全部楼层
回复  5i365

那这样呢,不需要知道节点的信息了
idwma 发表于 2021-12-26 20:22



    这种不稳, 实例中, 把好多地方都删除了
 楼主| 发表于 2021-12-27 19:27:07 | 显示全部楼层
回复 30# idwma


    我感觉下面这种可能也不稳, 所以想找上面那种结点的方法来删除:
$b = $a.SelectSingleNode("//*[./.='ABC']")
 楼主| 发表于 2021-12-27 19:47:40 | 显示全部楼层
本帖最后由 5i365 于 2021-12-27 19:49 编辑

回复 30# idwma


实例中下面这种匹配真出错了 , 我不再找文本是 ABC 的,换成了找是 A 的, 结果把别的地方的A也删除了,

$b = $a.SelectSingleNode("//*[./.='A']"

看来至少要限定A所在的标签, 下面这样可以定位所在标签了, 但没有办法删除爷标签 :

$b = $a.SelectSingleNode("//rehearsal[./.='A']"
发表于 2021-12-27 22:53:38 | 显示全部楼层
回复 35# 5i365
  1. $a.SelectSingleNode("//*[*/rehearsal='A']")
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 牛X 多谢, 这回感觉应该稳了

查看全部评分

 楼主| 发表于 2021-12-28 08:15:45 | 显示全部楼层
回复 36# idwma


    如何让a这个文本不区分大小写? 这个只能找小a
$a.SelectSingleNode("//*[*/rehearsal='a']")
发表于 2021-12-28 15:18:04 | 显示全部楼层
回复 37# 5i365

搜一下就有了照抄了
     https://developer.mozilla.org/en ... Functions/translate
  1. $a.SelectSingleNode("//*[*/rehearsal=translate('a', 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')]")
复制代码
 楼主| 发表于 2021-12-28 18:18:56 | 显示全部楼层
回复 38# idwma


    多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 04:11 , Processed in 0.023902 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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