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

[文本处理] 求助批处理从一堆XML中提取关键词整理到一个csv中

[复制链接]
发表于 2025-2-21 14:04:15 | 显示全部楼层 |阅读模式
大家好,我有几百个xml文件,我的代码大致如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
  3.         <skill id="2606" levels="1" name="Gran Kain's Gift Box">
  4.                 <table name="#extractableItems">
  5.                         13259,1,0.8130;13258,1,1.626;13260,1,16.260;13261,10,4.645;13262,10,4.645;13263,10,4.645;13264,10,4.645;13265,10,4.645;13266,10,4.645;13267,10,4.645;13268,10,32.5260;13269,10,16.260
  6.                 </table>
  7.                 <!-- set name="reuseDelay" val="86400000" / -->
  8.                 <set name="capsuled_items_skill" val="#extractableItems" />
  9.                 <set name="isMagic" val="2" /> <!-- Static Skill -->
  10.                 <set name="magicLevel" val="1" />
  11.                 <set name="operateType" val="A1" />
  12.                 <set name="targetType" val="SELF" />
  13.                 <cond msgId="129">
  14.                         <and>
  15.                                 <player invSize="10" />
  16.                                 <player weight="80" />
  17.                         </and>
  18.                 </cond>
  19.                 <for>
  20.                         <effect name="RestorationRandom" />
  21.                 </for>
  22.         </skill>
  23.         <skill id="22109" levels="1" name="Shiny Halloween Toy Box">
  24.                 <table name="#extractableItems">
  25.                         20718,1,20;20719,1,20;20720,1,20;20721,1,20;20722,1,20
  26.                 </table>
  27.                 <set name="blockedInOlympiad" val="true" />
  28.                 <set name="capsuled_items_skill" val="#extractableItems" />
  29.                 <set name="itemConsumeCount" val="1" />
  30.                 <set name="itemConsumeId" val="20717" />
  31.                 <set name="isMagic" val="2" /> <!-- Static Skill -->
  32.                 <set name="magicLevel" val="1" />
  33.                 <set name="operateType" val="A1" />
  34.                 <set name="targetType" val="SELF" />
  35.                 <cond msgId="129">
  36.                         <and>
  37.                                 <player invSize="10" />
  38.                                 <player weight="80" />
  39.                         </and>
  40.                 </cond>
  41.                 <for>
  42.                         <effect name="RestorationRandom" />
  43.                 </for>
  44.         </skill>
复制代码
看着挺多,但我只需要<table name="#extractableItems">这个下面字段的值,并把字段值整理一下,最终效果是

  1. 2606        1        Gran Kain's Gift Box        13259        1        0.813
  2. 2606        1        Gran Kain's Gift Box        13258        1        1.626
  3. 2606        1        Gran Kain's Gift Box        13260        1        16.26
  4. 2606        1        Gran Kain's Gift Box        13261        10        4.645
  5. 2606        1        Gran Kain's Gift Box        13262        10        4.645
  6. 2606        1        Gran Kain's Gift Box        13263        10        4.645
  7. 2606        1        Gran Kain's Gift Box        13264        10        4.645
  8. 2606        1        Gran Kain's Gift Box        13265        10        4.645
  9. 2606        1        Gran Kain's Gift Box        13266        10        4.645
  10. 2606        1        Gran Kain's Gift Box        13267        10        4.645
  11. 2606        1        Gran Kain's Gift Box        13268        10        32.526
  12. 2606        1        Gran Kain's Gift Box        13269        10        16.26
  13. 22109        1        Shiny Halloween Toy Box        20718        1        20
  14. 22109        1        Shiny Halloween Toy Box        20719        1        20
  15. 22109        1        Shiny Halloween Toy Box        20720        1        20
  16. 22109        1        Shiny Halloween Toy Box        20721        1        20
  17. 22109        1        Shiny Halloween Toy Box        20722        1        20
复制代码

谢谢各位
 楼主| 发表于 2025-2-21 14:11:27 | 显示全部楼层
还有一种,是这样的,也是几百个XML文件,代码如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/items.xsd">
  3.         <item id="14849" type="EtcItem" name="Kahman's Supply Box">
  4.                 <!-- Supply box received from Mercenary Kahman as mission compensation. Double click to check more information. -->
  5.                 <set name="icon" val="icon.etc_jewel_box_i00" />
  6.                 <set name="default_action" val="PEEL" />
  7.                 <set name="immediate_effect" val="true" />
  8.                 <set name="material" val="PAPER" />
  9.                 <set name="weight" val="2" />
  10.                 <set name="is_tradable" val="false" />
  11.                 <set name="is_dropable" val="false" />
  12.                 <set name="is_sellable" val="false" />
  13.                 <set name="is_depositable" val="false" />
  14.                 <set name="is_stackable" val="true" />
  15.                 <set name="handler" val="ExtractableItems" />
  16.                 <set name="capsuled_items" val="9625,1,1,100;9626,1,1,80" />
  17.         </item>
  18.         <item id="14850" type="EtcItem" name="Droph's Support Items">
  19.                 <!-- Support items received from Dwarven Explorer Droph for defeating Hekaton Prime. Double click to check more information. -->
  20.                 <set name="icon" val="icon.etc_jewel_box_i00" />
  21.                 <set name="default_action" val="PEEL" />
  22.                 <set name="immediate_effect" val="true" />
  23.                 <set name="material" val="PAPER" />
  24.                 <set name="weight" val="2" />
  25.                 <set name="is_tradable" val="false" />
  26.                 <set name="is_dropable" val="false" />
  27.                 <set name="is_sellable" val="false" />
  28.                 <set name="is_depositable" val="false" />
  29.                 <set name="is_stackable" val="true" />
  30.                 <set name="handler" val="ExtractableItems" />
  31.                 <set name="capsuled_items" val="5575,140000,240000,100" />
  32.         </item>
复制代码
这个就是把带有capsuled_items的val值拿出来,也是整理成如下样式:
  1. 14849        EtcItem        Kahman's Supply Box        9625        1        1        100
  2. 14849        EtcItem        Kahman's Supply Box        9626        1        1        80
  3. 14850        EtcItem        Droph's Support Items        5575        140000        240000        100
复制代码
再此谢谢各位大大。
发表于 2025-2-22 12:42:14 | 显示全部楼层
回复 1# zhengwei007


   
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* > out.csv & pause & exit /b

  3. Option Explicit
  4. Dim oDOMDocument, oWshShell, oFSO, p, i

  5. p = "."      '当前路径。可以指定其它路径,比如 d:\test\

  6. Set oDOMDocument = CreateObject("Msxml2.DOMDocument")
  7. Set oWshShell = CreateObject("WScript.Shell")
  8. Set oFSO = CreateObject("Scripting.FileSystemObject")
  9. p = oFSO.GetAbsolutePathName(p)
  10. oWshShell.CurrentDirectory = p
  11. For Each i In oFSO.GetFolder(p).Files
  12.     If LCase(oFSO.GetExtensionName(i)) = LCase("xml") Then Call t(i.Path)
  13. Next

  14. Sub t(ByVal file)
  15.     Dim s, i, x, oNode, oNodeList, m
  16.     oDOMDocument.load file
  17.     If oDOMDocument.parseError.errorCode <> 0 Then
  18.         wsh.Echo file & " Error!"
  19.         Exit Sub
  20.     End If
  21.     For Each oNode In oDOMDocument.documentElement.getElementsByTagName("skill")
  22.         s = ""
  23.         Set oNodeList = oNode.SelectNodes("@id")
  24.         x = oNodeList(0).value
  25.         Set oNodeList = oNode.SelectNodes("@levels")
  26.         x = x & vbTab & oNodeList(0).value
  27.         Set oNodeList = oNode.SelectNodes("@name")
  28.         x = x & vbTab & oNodeList(0).value
  29.         Set oNodeList = oNode.SelectNodes("table[@name='#extractableItems']")
  30.         For Each i In Split(oNodeList(0).text, ";")
  31.             s = x
  32.             For Each m In Split(i, ",")
  33.                 s = s & vbTab & m
  34.             Next
  35.             wsh.Echo s
  36.         Next
  37.     Next
  38. End Sub
复制代码
发表于 2025-2-22 12:49:06 | 显示全部楼层
回复 2# zhengwei007


   
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* > out.csv & pause & exit /b

  3. Option Explicit
  4. Dim oDOMDocument, oWshShell, oFSO, p, i

  5. p = "."      '当前路径。可以指定其它路径,比如 d:\test\

  6. Set oDOMDocument = CreateObject("Msxml2.DOMDocument")
  7. Set oWshShell = CreateObject("WScript.Shell")
  8. Set oFSO = CreateObject("Scripting.FileSystemObject")
  9. p = oFSO.GetAbsolutePathName(p)
  10. oWshShell.CurrentDirectory = p
  11. For Each i In oFSO.GetFolder(p).Files
  12.     If LCase(oFSO.GetExtensionName(i)) = LCase("xml") Then Call t(i.Path)
  13. Next

  14. Sub t(ByVal file)
  15.     Dim s, i, x, oNode, oNodeList, m
  16.     oDOMDocument.load file
  17.     If oDOMDocument.parseError.errorCode <> 0 Then
  18.         wsh.Echo file & " Error!"
  19.         Exit Sub
  20.     End If
  21.     For Each oNode In oDOMDocument.documentElement.getElementsByTagName("item")
  22.         s = ""
  23.         Set oNodeList = oNode.SelectNodes("@id")
  24.         x = oNodeList(0).value
  25.         Set oNodeList = oNode.SelectNodes("@type")
  26.         x = x & vbTab & oNodeList(0).value
  27.         Set oNodeList = oNode.SelectNodes("@name")
  28.         x = x & vbTab & oNodeList(0).value
  29.         Set oNodeList = oNode.SelectNodes("set[@name='capsuled_items' and @val]")
  30.         For Each i In Split(oNodeList(0).getAttribute("val"), ";")
  31.             s = x
  32.             For Each m In Split(i, ",")
  33.                 s = s & vbTab & m
  34.             Next
  35.             wsh.Echo s
  36.         Next
  37.     Next
  38. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 10:59 , Processed in 0.017819 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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