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

[文本处理] 【已解决】求助:批处理解析xml文件修改指定节点/元素/标签里的文本内容

[复制链接]
发表于 2013-5-4 17:01:14 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-4-30 08:12 编辑

有一段xml文本,要求对属性name=Theme.Holo.Wallpaper之下的<item name="windowShowWallpaper">false</item>
这一句中的false替换为true,其他的不变,怎么破?不用sed等第三方工具前提下,因为要让别人使用

<style name="Theme.Holo.Wallpaper" parent="@style/Theme.Holo">
        <item name="progressBarStyleLargeInverse">
        <item name="textColorPrimaryInverseDisableOnly">
        <item name="windowShowWallpaper">false</item>
               
<style name="Theme.Wallpaper" parent="@style/Theme">
        <item name="windowShowWallpaper">flase</item>

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-5-4 18:48:08 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.xml) do (
  3.    set "str=%%i"
  4.    if "!str:"Theme.Holo.Wallpaper"=!" neq "!str!" set flag=1
  5.    if defined flag (
  6.       if "!str:"windowShowWallpaper"=!" neq "!str!" (
  7.          set "str=!str:false=True!"
  8.          set "flag="
  9.       )
  10.    )
  11.    echo,!str!
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
sxw + 1 乐于住人

查看全部评分

发表于 2013-5-4 18:50:40 | 显示全部楼层
这个算是比较经典,比较常见的吧,虽然我是新手不懂。
不过有看过网页文件提取的。这个就记录下帖子查阅。
谢谢sxw,谢谢apang。
发表于 2013-5-4 19:05:57 | 显示全部楼层
这样试试:
  1. Set xmldom=CreateObject("microsoft.xmldom")
  2. xmldom.load("a.xml")
  3. Set root=xmldom.documentElement
  4. Set colItem=root.getElementsByTagName("item")
  5. For Each item In colItem
  6.     If item.getAttribute("name")="windowShowWallpaper" Then
  7.         item.childnodes(0).nodevalue="true"
  8.     End If
  9. Next
  10. xmldom.save("a.xml")
复制代码

评分

参与人数 1技术 +1 收起 理由
sxw + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-5-4 19:08:24 | 显示全部楼层
回复 2# apang


    完美运行,这类问题算是有套解决方案了,谢了!
 楼主| 发表于 2013-5-4 19:10:12 | 显示全部楼层
回复 4# wankoilz


    嗯这是vbs嘛?
 楼主| 发表于 2013-5-4 19:10:56 | 显示全部楼层
回复 3# lky216


      收藏,特别是牵涉到上下行的问题
 楼主| 发表于 2013-5-4 19:17:22 | 显示全部楼层
有一段xml文本,要求对属性name=Theme.Holo.Wallpaper之下的false
这一句中的false替换为true,其他的不变 ...
sxw 发表于 2013-5-4 17:01



     可以是可以,但是都变成true了。我只要Theme.Holo.Wallpaper这个属性下的变成true就行了,依然感谢。。方法也行的通,少许修改?
发表于 2013-5-4 20:14:04 | 显示全部楼层
哦,没注意是Theme.Holo.Wallpaper下面...
发表于 2013-5-4 21:01:27 | 显示全部楼层
很精美。。。
发表于 2013-5-4 21:49:10 | 显示全部楼层
回复 4# wankoilz


    楼主也有学这个吧http://www.w3school.com.cn/xmldom/
发表于 2013-5-5 04:45:06 | 显示全部楼层
回复 8# sxw


    小改一下应该就行了:
  1. Set xmldom=CreateObject("microsoft.xmldom")
  2. xmldom.load("a.xml")
  3. Set root=xmldom.documentElement
  4. Set eleStyle=root.getElementsByName("Theme.Holo.Wallpaper")
  5. Set colItem=eleStyle.getElementsByTagName("item")
  6. For Each item In colItem
  7.     If item.getAttribute("name")="windowShowWallpaper" Then
  8.         item.childnodes(0).nodevalue="true"
  9.     End If
  10. Next
  11. xmldom.save("b.xml")
复制代码
发表于 2013-5-5 04:50:53 | 显示全部楼层
回复 12# CrLf


    或这样:
  1. Set xmldom=CreateObject("microsoft.xmldom")
  2. xmldom.load("a.xml")
  3. Set root=xmldom.documentElement
  4. Set colItem=root.getElementsByTagName("item")
  5. For Each item In colItem
  6.     If item.getAttribute("name")="windowShowWallpaper" And item.parentNode.getAttribute("name")="Theme.Holo.Wallpaper" Then
  7.         item.childnodes(0).nodevalue="true"
  8.     End If
  9. Next
  10. xmldom.save("a.xml")
复制代码

评分

参与人数 1技术 +1 收起 理由
sxw + 1 可以。。

查看全部评分

 楼主| 发表于 2013-5-5 07:09:27 | 显示全部楼层
回复 11# lky216


    没学完。。。我是用到再看的那种
发表于 2013-12-12 16:33:19 | 显示全部楼层
回复 12# CrLf

在cmd运行不了,要安装什么插件吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:16 , Processed in 0.022461 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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