标题: [文件操作] 【已解决】求助批处理从一堆XML中提取关键词写到csv中 [打印本页]
作者: zhengwei007 时间: 2024-3-22 19:24 标题: 【已解决】求助批处理从一堆XML中提取关键词写到csv中
本帖最后由 zhengwei007 于 2024-3-23 10:22 编辑
我有一堆XML文件,想从这些文件中找两个ID直接取值,里面内容有多有少,代码如下:- <?xml version="1.0" encoding="UTF-8"?>
- <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
- <skill id="1201" levels="33" name="Dryad Root" enchantGroup1="1" enchantGroup2="1">
- <table name="#effectPoints"> -227 -235 -243 -268 -277 -285 -313 -322 -331 -360 -369 -379 -399 -408 -418 -438 -448 -457 -477 -486 -495 -514 -523 -532 -549 -566 -582 -597 -611 -624 -635 -646 -655 </table>
- <table name="#magicLvl"> 23 24 25 28 29 30 33 34 35 38 39 40 42 43 44 46 47 48 50 51 52 54 55 56 58 60 62 64 66 68 70 72 74 </table>
- <table name="#mpConsume"> 17 17 18 20 21 21 23 24 24 27 27 28 30 30 31 33 34 35 36 37 38 39 40 41 43 44 46 48 49 51 52 53 55 </table>
- <table name="#mpInitialConsume"> 5 5 5 5 6 6 6 6 6 7 7 7 8 8 8 9 9 9 9 10 10 10 10 11 11 11 12 12 13 13 13 14 14 </table>
- <table name="#ench1ActivateRates"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
- <table name="#ench1Power"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
- <table name="#ench2AbnormalTimes"> 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 </table>
- <table name="#ench2mpConsume"> 54 53 52 50 50 49 48 46 46 45 44 44 42 42 41 40 38 38 37 36 34 34 33 33 32 30 30 29 28 26 </table>
- <table name="#ench2mpInitialConsume"> 13 13 13 13 12 12 12 12 11 11 11 11 11 10 10 10 10 9 9 9 9 8 8 8 8 8 7 7 7 7 </table>
- <table name="#enchMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 </table>
- <set name="abnormalLvl" val="1" />
- <set name="abnormalTime" val="30" />
- <set name="abnormalType" val="ROOT_MAGICALLY" />
- <set name="abnormalVisualEffect" val="ROOT" />
- <set name="activateRate" val="80" />
- <set name="basicProperty" val="MEN" />
- <set name="castRange" val="600" />
- <set name="effectPoint" val="#effectPoints" />
- <set name="effectRange" val="1100" />
- <set name="hitTime" val="2500" />
- <set name="icon" val="icon.skill1201" />
- <set name="isDebuff" val="true" />
- <set name="isMagic" val="1" /> <!-- Magic Skill -->
- <set name="lvlBonusRate" val="2" />
- <set name="magicLvl" val="#magicLvl" />
- <set name="mpConsume" val="#mpConsume" />
- <set name="mpInitialConsume" val="#mpInitialConsume" />
- <set name="operateType" val="A2" />
- <set name="power" val="80" /> <!-- Base Land Rate -->
- <set name="reuseDelay" val="2000" />
- <set name="targetType" val="ONE" />
- <set name="trait" val="HOLD" />
- <enchant1 name="activateRate" val="#ench1ActivateRates" />
- <enchant1 name="magicLvl" val="#enchMagicLvl" />
- <enchant1 name="power" val="#ench1Power" />
- <enchant2 name="abnormalTime" val="#ench2AbnormalTimes" />
- <enchant2 name="magicLvl" val="#enchMagicLvl" />
- <enchant2 name="mpConsume" val="#ench2mpConsume" />
- <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume" />
- <for>
- <effect name="Root" />
- </for>
- </skill>
- <skill id="4500" levels="1" name="Treasure Chest - Level 27">
- <!-- This Skill Is Only For Description In The Client -->
- <set name="icon" val="icon.skill0042" />
- <set name="magicLvl" val="1" />
- <set name="operateType" val="P" />
- <set name="targetType" val="SELF" />
- </skill>
- </list>
复制代码
根据以上代码,我只要两个字段,一个是skill id,一个是set name="icon"后面的val中的内容,标题我自己写,导出效果如下:- skillid icon
- 1201 icon.skill1201
- 4500 icon.skill0042
复制代码
作者: hfxiang 时间: 2024-3-23 09:19
回复 1# zhengwei007
第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方式如下:- gawk -F"\042" -v"OFS=\t" "BEGIN{print\"skillid\ticon\"}/<skill id=/,/<\/skill>/{if(/<skill id=/){b=$2}if(/<set name=/&&$2~/^icon$/){print b,$4}}" *.xml>out.csv
复制代码
作者: zhengwei007 时间: 2024-3-23 10:22
回复 zhengwei007
第3方工具gawk( )的实现方式如下:
hfxiang 发表于 2024-3-23 09:19
谢谢老铁!太强了!
作者: qixiaobin0715 时间: 2024-3-26 16:01
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,3,5 delims== " %%i in ('findstr /c:"skill id" /c:"\"icon\"" a.txt') do (
- if /i "%%i"=="<skill" (
- set str=%%~j
- ) else (
- echo,!str! %%~k
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |