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

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

大家好,我有几百个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
复制代码

谢谢各位

还有一种,是这样的,也是几百个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
复制代码
再此谢谢各位大大。

TOP

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

QQ 20147578

TOP

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

QQ 20147578

TOP

返回列表