Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何解析XML文件以获取标记值并处理大于和双引号字符?_Windows_String_Batch File - Fatal编程技术网

Windows 如何解析XML文件以获取标记值并处理大于和双引号字符?

Windows 如何解析XML文件以获取标记值并处理大于和双引号字符?,windows,string,batch-file,Windows,String,Batch File,如何使用批处理文件从XML文件中提取信息 这是我正在尝试的代码: @echo off setlocal enableextensions enabledelayedexpansion set "xmlFile=%~1" for /f "tokens=*" %%A in (%xmlFile%) do ( call :f_extractData "%%A" ) :f_extractData set line=%1 if not x%line:00-24=%==x%line% ( if

如何使用批处理文件从XML文件中提取信息

这是我正在尝试的代码:

@echo off
setlocal enableextensions enabledelayedexpansion
set "xmlFile=%~1"
for /f "tokens=*" %%A in (%xmlFile%) do (
    call :f_extractData "%%A"
)
:f_extractData
set line=%1
if not x%line:00-24=%==x%line% (
    if not x%line:precipitacion=%==x%line% (
        set data=%1:"=%
        echo.%data%
    )
)
EXIT /b
endlocal
:EOF
但在阅读以下行时,它失败了:

<prob_precipitacion periodo="00-24"></prob_precipitacion>
<prob_precipitacion periodo="00-24">0</prob_precipitacion>
<prob_precipitacion periodo="00-24">25</prob_precipitacion>
在那些线路上失败了。我猜它失败是因为
字符。但我不知道如何删除这些字符来管理它

有什么想法吗

下面是我用来测试的完整xml:

<?xml version="1.0" encoding="ISO-8859-15" ?>
<root id="41091" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.aemet.es/xsd/localidades.xsd">
<origen>
    <productor>Agencia Estatal de Meteorología - AEMET. Gobierno de España</productor>
    <web>http://www.aemet.es</web>
    <enlace>http://www.aemet.es/es/eltiempo/prediccion/municipios/sevilla-id41091</enlace>
    <language>es</language>
    <copyright>&#169; AEMET. Autorizado el uso de la información y su reproducción citando a AEMET como autora de la misma.</copyright>
    <nota_legal>http://www.aemet.es/es/nota_legal</nota_legal>
</origen>
<elaborado>2014-12-17T20:20:02</elaborado>
<nombre>Sevilla</nombre>
<provincia>Sevilla</provincia>
<prediccion>
    <dia fecha="2014-12-17">
        <prob_precipitacion periodo="00-24"></prob_precipitacion>
        <prob_precipitacion periodo="00-12"></prob_precipitacion>
        <prob_precipitacion periodo="12-24">0</prob_precipitacion>
        <prob_precipitacion periodo="00-06"></prob_precipitacion>
        <prob_precipitacion periodo="06-12"></prob_precipitacion>
        <prob_precipitacion periodo="12-18">0</prob_precipitacion>
        <prob_precipitacion periodo="18-24">0</prob_precipitacion>
        <cota_nieve_prov periodo="00-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-06"></cota_nieve_prov>
        <cota_nieve_prov periodo="06-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-18"></cota_nieve_prov>
        <cota_nieve_prov periodo="18-24"></cota_nieve_prov>
        <estado_cielo periodo="00-24" descripcion=""></estado_cielo>
        <estado_cielo periodo="00-12" descripcion=""></estado_cielo>
        <estado_cielo periodo="12-24" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="00-06" descripcion=""></estado_cielo>
        <estado_cielo periodo="06-12" descripcion=""></estado_cielo>
        <estado_cielo periodo="12-18" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="18-24" descripcion="Despejado">11n</estado_cielo>
        <viento periodo="00-24">
            <direccion></direccion>
            <velocidad></velocidad>
        </viento>
        <viento periodo="00-12">
            <direccion></direccion>
            <velocidad></velocidad>
        </viento>
        <viento periodo="12-24">
            <direccion>C</direccion>
            <velocidad>0</velocidad>
        </viento>
        <viento periodo="00-06">
            <direccion></direccion>
            <velocidad></velocidad>
        </viento>
        <viento periodo="06-12">
            <direccion>C</direccion>
            <velocidad>0</velocidad>
        </viento>
        <viento periodo="12-18">
            <direccion>C</direccion>
            <velocidad>0</velocidad>
        </viento>
        <viento periodo="18-24">
            <direccion>C</direccion>
            <velocidad>0</velocidad>
        </viento>
        <racha_max periodo="00-24"></racha_max>
        <racha_max periodo="00-12"></racha_max>
        <racha_max periodo="12-24"></racha_max>
        <racha_max periodo="00-06"></racha_max>
        <racha_max periodo="06-12"></racha_max>
        <racha_max periodo="12-18"></racha_max>
        <racha_max periodo="18-24"></racha_max>
        <temperatura>
            <maxima>15</maxima>
            <minima>9</minima>
            <dato hora="06"></dato>
            <dato hora="12">15</dato>
            <dato hora="18">14</dato>
            <dato hora="24">9</dato>
        </temperatura>
        <sens_termica>
            <maxima>15</maxima>
            <minima>8</minima>
            <dato hora="06"></dato>
            <dato hora="12">15</dato>
            <dato hora="18">14</dato>
            <dato hora="24">9</dato>
        </sens_termica>
        <humedad_relativa>
            <maxima>95</maxima>
            <minima>60</minima>
            <dato hora="06"></dato>
            <dato hora="12">60</dato>
            <dato hora="18">65</dato>
            <dato hora="24">90</dato>
        </humedad_relativa>
        <uv_max>2</uv_max>
    </dia>
    <dia fecha="2014-12-18">
        <prob_precipitacion periodo="00-24">25</prob_precipitacion>
        <prob_precipitacion periodo="00-12">0</prob_precipitacion>
        <prob_precipitacion periodo="12-24">0</prob_precipitacion>
        <prob_precipitacion periodo="00-06">0</prob_precipitacion>
        <prob_precipitacion periodo="06-12">0</prob_precipitacion>
        <prob_precipitacion periodo="12-18">0</prob_precipitacion>
        <prob_precipitacion periodo="18-24">0</prob_precipitacion>
        <cota_nieve_prov periodo="00-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-06"></cota_nieve_prov>
        <cota_nieve_prov periodo="06-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-18"></cota_nieve_prov>
        <cota_nieve_prov periodo="18-24"></cota_nieve_prov>
        <estado_cielo periodo="00-24" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="00-12" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="12-24" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="00-06" descripcion="Despejado">11n</estado_cielo>
        <estado_cielo periodo="06-12" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="12-18" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="18-24" descripcion="Despejado">11n</estado_cielo>
        <viento periodo="00-24">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="00-12">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="12-24">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="00-06">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="06-12">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="12-18">
            <direccion>C</direccion>
            <velocidad>0</velocidad>
        </viento>
        <viento periodo="18-24">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <racha_max periodo="00-24"></racha_max>
        <racha_max periodo="00-12"></racha_max>
        <racha_max periodo="12-24"></racha_max>
        <racha_max periodo="00-06"></racha_max>
        <racha_max periodo="06-12"></racha_max>
        <racha_max periodo="12-18"></racha_max>
        <racha_max periodo="18-24"></racha_max>
        <temperatura>
            <maxima>18</maxima>
            <minima>7</minima>
            <dato hora="06">8</dato>
            <dato hora="12">16</dato>
            <dato hora="18">14</dato>
            <dato hora="24">8</dato>
        </temperatura>
        <sens_termica>
            <maxima>18</maxima>
            <minima>7</minima>
            <dato hora="06">8</dato>
            <dato hora="12">16</dato>
            <dato hora="18">14</dato>
            <dato hora="24">8</dato>
        </sens_termica>
        <humedad_relativa>
            <maxima>90</maxima>
            <minima>45</minima>
            <dato hora="06">90</dato>
            <dato hora="12">55</dato>
            <dato hora="18">55</dato>
            <dato hora="24">85</dato>
        </humedad_relativa>
        <uv_max>2</uv_max>
    </dia>
    <dia fecha="2014-12-19">
        <prob_precipitacion periodo="00-24">0</prob_precipitacion>
        <prob_precipitacion periodo="00-12">0</prob_precipitacion>
        <prob_precipitacion periodo="12-24">0</prob_precipitacion>
        <cota_nieve_prov periodo="00-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-24"></cota_nieve_prov>
        <estado_cielo periodo="00-24" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="00-12" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="12-24" descripcion="Despejado">11</estado_cielo>
        <viento periodo="00-24">
            <direccion>E</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="00-12">
            <direccion>N</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="12-24">
            <direccion>E</direccion>
            <velocidad>5</velocidad>
        </viento>
        <racha_max periodo="00-24"></racha_max>
        <racha_max periodo="00-12"></racha_max>
        <racha_max periodo="12-24"></racha_max>
        <temperatura>
            <maxima>17</maxima>
            <minima>5</minima>
        </temperatura>
        <sens_termica>
            <maxima>17</maxima>
            <minima>3</minima>
        </sens_termica>
        <humedad_relativa>
            <maxima>100</maxima>
            <minima>60</minima>
        </humedad_relativa>
        <uv_max>2</uv_max>
    </dia>
    <dia fecha="2014-12-20">
        <prob_precipitacion periodo="00-24">0</prob_precipitacion>
        <prob_precipitacion periodo="00-12">0</prob_precipitacion>
        <prob_precipitacion periodo="12-24">0</prob_precipitacion>
        <cota_nieve_prov periodo="00-24"></cota_nieve_prov>
        <cota_nieve_prov periodo="00-12"></cota_nieve_prov>
        <cota_nieve_prov periodo="12-24"></cota_nieve_prov>
        <estado_cielo periodo="00-24" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="00-12" descripcion="Despejado">11</estado_cielo>
        <estado_cielo periodo="12-24" descripcion="Despejado">11</estado_cielo>
        <viento periodo="00-24">
            <direccion>NE</direccion>
            <velocidad>5</velocidad>
        </viento>
        <viento periodo="00-12">
            <direccion>N</direccion>
            <velocidad>10</velocidad>
        </viento>
        <viento periodo="12-24">
            <direccion>NE</direccion>
            <velocidad>5</velocidad>
        </viento>
        <racha_max periodo="00-24"></racha_max>
        <racha_max periodo="00-12"></racha_max>
        <racha_max periodo="12-24"></racha_max>
        <temperatura>
            <maxima>17</maxima>
            <minima>5</minima>
        </temperatura>
        <sens_termica>
            <maxima>17</maxima>
            <minima>3</minima>
        </sens_termica>
        <humedad_relativa>
            <maxima>100</maxima>
            <minima>70</minima>
        </humedad_relativa>
        <uv_max>2</uv_max>
    </dia>
    <dia fecha="2014-12-21">
        <prob_precipitacion>0</prob_precipitacion>
        <cota_nieve_prov></cota_nieve_prov>
        <estado_cielo descripcion="Poco nuboso">12</estado_cielo>
        <viento>
            <direccion>NE</direccion>
            <velocidad>5</velocidad>
        </viento>
        <racha_max></racha_max>
        <temperatura>
            <maxima>16</maxima>
            <minima>4</minima>
        </temperatura>
        <sens_termica>
            <maxima>16</maxima>
            <minima>3</minima>
        </sens_termica>
        <humedad_relativa>
            <maxima>95</maxima>
            <minima>70</minima>
        </humedad_relativa>
        <uv_max>2</uv_max>
    </dia>
    <dia fecha="2014-12-22">
        <prob_precipitacion>0</prob_precipitacion>
        <cota_nieve_prov></cota_nieve_prov>
        <estado_cielo descripcion="Poco nuboso">12</estado_cielo>
        <viento>
            <direccion>E</direccion>
            <velocidad>10</velocidad>
        </viento>
        <racha_max></racha_max>
        <temperatura>
            <maxima>18</maxima>
            <minima>8</minima>
        </temperatura>
        <sens_termica>
            <maxima>18</maxima>
            <minima>7</minima>
        </sens_termica>
        <humedad_relativa>
            <maxima>95</maxima>
            <minima>75</minima>
        </humedad_relativa>
    </dia>
    <dia fecha="2014-12-23">
        <prob_precipitacion>0</prob_precipitacion>
        <cota_nieve_prov></cota_nieve_prov>
        <estado_cielo descripcion="Poco nuboso">12</estado_cielo>
        <viento>
            <direccion>NE</direccion>
            <velocidad>10</velocidad>
        </viento>
        <racha_max></racha_max>
        <temperatura>
            <maxima>17</maxima>
            <minima>6</minima>
        </temperatura>
        <sens_termica>
            <maxima>17</maxima>
            <minima>4</minima>
        </sens_termica>
        <humedad_relativa>
            <maxima>95</maxima>
            <minima>65</minima>
        </humedad_relativa>
    </dia>
</prediccion>

西班牙气象局
http://www.aemet.es
http://www.aemet.es/es/eltiempo/prediccion/municipios/sevilla-id41091
锿
©;Amet.Autorizado el uso de la información y su reproductionón citando a AEMET como autora de la mism。
http://www.aemet.es/es/nota_legal
2014-12-17T20:20:02
塞维利亚
塞维利亚
0
0
0
11
11
11n
C
0
C
0
C
0
C
0
15
9
15
14
9
15
8.
15
14
9
95
60
60
65
90
2.
25
0
0
0
0
0
0
11
11
11
11n
11
11
11n
N
5.
N
5.
N
5.
N
5.
N
5.
C
0
N
5.
18
7.
8.
16
14
8.
18
7.
8.
16
14
8.
90
45
90
55
55
85
2.
0
0
0
11
11
11
E
5.
N
5.
E
5.
17
5.
17
3.
100
60
2.
0
0
0
11
11
11
氖
5.
N
10
氖
5.
17
5.
17
3.
100
70
2.
0
12
氖
5.
16
4.
16
3.
95
70
2.
0
12
E
10
18
8.
18
7.
95
75
0
12
氖
10
17
6.
17
4.
95
65

您错过了许多双引号,以避免
没有被解释为具有特殊的命令行含义

但是,使用FOR命令而不是环境变量替换,可以更好地拆分行

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq tokens=1-4 delims=<>= " %%A in ("%~1") do (

    set "TagName=%%A"
    set "AttributeName=%%B"
    set "AttributeValue=%%~C"
    set "TagValue=%%D"

    if "!TagName!"=="prob_precipitacion" (
        if "!AttributeName!"=="periodo" (
            if "!AttributeValue!"=="00-24" (
                if "!TagValue:~0,1!"=="/" set "TagValue=0"
                echo !TagValue!
            )
        )
    )

    set "TagName="
    set "AttributeName="
    set "AttributeValue="
    set "TagValue="
)
endlocal
@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
对于/F“usebackq令牌=1-4 delims==”%%A in(“%1”)do(
设置“标记名=%%A”
设置“AttributeName=%%B”
设置“AttributeValue=%%~C”
设置“TagValue=%%D”
如果“!TagName!”==“概率沉淀”(
如果“!AttributeName!”==“periodo”(
如果“!AttributeValue!”==“00-24”(
如果“!TagValue:~0,1!”=“/”设置“TagValue=0”
echo!TagValue!
)
)
)
设置“标记名=”
设置“AttributeName=”
设置“AttributeValue=”
设置“TagValue=”
)
端部

编辑:

通过在等号和分隔符列表中的空格字符之间添加水平制表符,带有标记1到4的for命令将独立于XML文件中的缩进

for /F "usebackq tokens=1-4 delims=<>=   " %%A in ("%~1") do (
for/F“usebackq令牌=1-4 delims==”%%A in(“%1”)do(
delims=后面有5个字符:

  • 左角括号
  • 直角括号
  • 等号
  • 水平制表符(不是浏览器显示的空格序列)和
  • 单个空格字符
  • 分隔符字符的顺序很重要,否则命令行解释器将由于语法错误退出批处理脚本

    通过此修改,可以使用spa缩进XML行
    for /F "usebackq tokens=1-4 delims=<>=   " %%A in ("%~1") do (
    
    goto :eof
    
    @echo off
    setlocal EnableExtensions EnableDelayedExpansion
    for /F "usebackq tokens=1-5 delims=<>= " %%A in ("aemet20141217.xml") do (
    set "TagName=%%B"
    set "AttributeName=%%C"
    set "AttributeValue=%%D"
    set "TagValue=%%E"
    
    if "!TagName!"=="prob_precipitacion" (
        if "!AttributeName!"=="periodo" (
            if "!AttributeValue!"==""00-24"" (
                if "!TagValue:~0,1!"=="/" set "TagValue=0"
                echo !TagValue!
            )
        ) 
        if "!AttributeName!" NEQ "periodo" (
        set "TagValue=!AttributeName!"
        if "!AttributeName:~0,1!"=="/" set "TagValue=0"
        echo !TagValue!
        )
    )
    set "TagName="
    set "AttributeName="
    set "AttributeValue="
    set "TagValue="
    )
    endlocal