首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用批处理脚本将XML文件标记数据提取为文本文件(级联问题)

使用批处理脚本将XML文件标记数据提取为文本文件(级联问题)
EN

Stack Overflow用户
提问于 2018-07-25 00:00:19
回答 2查看 634关注 0票数 1

我有一个只输出XML的应用程序,我的目标应用程序只能读取纯文本文件。我需要将<pending><results>标记数据分割成两个文件,并将输出连接到一行。我在这方面有困难,任何帮助都将不胜感激。是的,我想把它放在批处理脚本中。

输入XML文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<game>
    <visible>true</visible>
    <pending>
        <item>W1: Player 5 versus Player 28 • </item>
        <item>W1: Player 12 versus Player 21 • </item>
        <item>W1: Player 2 versus Player 31 • </item>
    </pending>
    <results>
        <item>W1: Player 13 defeats Player 20 (21-8) • </item>
        <item>W1: Player 29 defeats Player 4 (15-21) • </item>
        <item>W1: Player 24 defeats Player 9 (7-21) • </item>
    </results>
    <time>636680475521951568</time>
</game>

所需输出(包括尾随空间):

Pending.txt

代码语言:javascript
复制
W1: Player 5 versus Player 28 • W1: Player 12 versus Player 21 • W1: Player 2 versus Player 31 • 

Results.txt

代码语言:javascript
复制
W1: Player 13 defeats Player 20 (21-8) • W1: Player 29 defeats Player 4 (15-21) • W1: Player 24 defeats Player 9 (7-21) • 

我的剧本是:

代码语言:javascript
复制
@echo OFF

for /f "delims=" %%i in ('findstr /i /c:"<item>" input.xml') do call :job "%%i"
goto :eof

:job

set line=%1

set line=%line:/=%
set line=%line:<=+%
set line=%line:>=+%
set line=%line:*+item+=%
set line=%line:+=&rem.%
echo.%line%>>output.txt

:eof

我得到的输出(在一个文件中):

代码语言:javascript
复制
W1: Player 5 versus Player 28 • 
W1: Player 12 versus Player 21 • 
W1: Player 2 versus Player 31 • 
W1: Player 13 defeats Player 20 (21-8) • 
W1: Player 29 defeats Player 4 (15-21) • 
W1: Player 24 defeats Player 9 (7-21) • 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-25 01:25:22

我自己也是xml方面的新手,但是PowerShell使它变得很容易:

代码语言:javascript
复制
## Q:\Test\2018\07\25\SO_51509117.ps1
[xml]$xml=Get-Content .\input.xml -encoding utf8
($xml.game.pending.item|ForEach-Object{$_} ) -join '' |Set-Content .\pending.txt -Encoding utf8
($xml.game.results.item|ForEach-Object{$_} ) -join '' |Set-Content .\results.txt -Encoding utf8

样本输出

代码语言:javascript
复制
> gc .\pending.txt
W1: Player 5 versus Player 28 • W1: Player 12 versus Player 21 • W1: Player 2 versus Player 31 •

> gc .\results.txt
W1: Player 13 defeats Player 20 (21-8) • W1: Player 29 defeats Player 4 (15-21) • W1: Player 24 defeats Player 9 (7-21) •
票数 1
EN

Stack Overflow用户

发布于 2018-07-25 03:02:44

如果您真的想使用批处理文件强制执行此操作,则此操作可能对您有效。

代码语言:javascript
复制
@echo off
set "results="
set "pending="    
FOR /F "tokens=1* delims=<> " %%G IN (input.xml) do (
    IF /I "%%G"=="/pending" set "pending="
    IF DEFINED PENDING (
        FOR /F "tokens=1 delims=<" %%I IN ("%%H") DO call set "pline=%%pline%%%%I
    )
    IF /I "%%G"=="pending" set "pending=0"

    IF /I "%%G"=="/results" set "results="
    IF DEFINED RESULTS (
        FOR /F "tokens=1 delims=<" %%I IN ("%%H") DO call set "rline=%%rline%%%%I
    )
    IF /I "%%G"=="results" set "results=0"
)
echo %pline%
echo %rline%
pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51509117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档