Board logo

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

作者: sxw    时间: 2013-5-4 17:01     标题: 【已解决】求助:批处理解析xml文件修改指定节点/元素/标签里的文本内容

本帖最后由 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>
作者: apang    时间: 2013-5-4 18:48

  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
复制代码

作者: lky216    时间: 2013-5-4 18:50

这个算是比较经典,比较常见的吧,虽然我是新手不懂。
不过有看过网页文件提取的。这个就记录下帖子查阅。
谢谢sxw,谢谢apang。
作者: wankoilz    时间: 2013-5-4 19:05

这样试试:
  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")
复制代码

作者: sxw    时间: 2013-5-4 19:08

回复 2# apang


    完美运行,这类问题算是有套解决方案了,谢了!
作者: sxw    时间: 2013-5-4 19:10

回复 4# wankoilz


    嗯这是vbs嘛?
作者: sxw    时间: 2013-5-4 19:10

回复 3# lky216


      收藏,特别是牵涉到上下行的问题
作者: sxw    时间: 2013-5-4 19:17

有一段xml文本,要求对属性name=Theme.Holo.Wallpaper之下的false
这一句中的false替换为true,其他的不变 ...
sxw 发表于 2013-5-4 17:01



     可以是可以,但是都变成true了。我只要Theme.Holo.Wallpaper这个属性下的变成true就行了,依然感谢。。方法也行的通,少许修改?
作者: wankoilz    时间: 2013-5-4 20:14

哦,没注意是Theme.Holo.Wallpaper下面...
作者: wuhengsi    时间: 2013-5-4 21:01

很精美。。。
作者: lky216    时间: 2013-5-4 21:49

回复 4# wankoilz


    楼主也有学这个吧http://www.w3school.com.cn/xmldom/
作者: CrLf    时间: 2013-5-5 04:45

回复 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")
复制代码

作者: CrLf    时间: 2013-5-5 04:50

回复 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")
复制代码

作者: sxw    时间: 2013-5-5 07:09

回复 11# lky216


    没学完。。。我是用到再看的那种
作者: lky216    时间: 2013-12-12 16:33

回复 12# CrLf

在cmd运行不了,要安装什么插件吗?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2