从批处理脚本解析XML时出现意外字符

时间:2012-10-18 14:11:35

标签: xml-parsing cmd batch-file

当我尝试从批处理脚本

解析XML时,我收到此错误
 error : 
 < was unexpected at this time.

的xml:

<driver type=".dbdriver">
        <attributes>localhost;1521;XE;false</attributes>
        <driverType>Oracle thin</driverType>
      </driver>
      <password>7ECE6B7E7D2AF514C55BAE8B3A6B51E7</password>
      <user>JR</user>

batch scrpit:

for /f "tokens=3 delims=><" %%j in ('type %SETTINGSPATH% ^| find "<user>"') do set user=%%j

这段代码应该从XML中读取用户值,这只是“JR”,在某些机器上我得到这个值;但有些机器没有显示此值并显示此错误。

请指导。

2 个答案:

答案 0 :(得分:2)

使用批处理解析XML通常会产生问题并且总是存在风险。记录的有效XML可以通过多种方式合法地重新格式化,从而破坏解析器。但如果你真的想继续使用批处理......

如果IN()子句中有未转义且未加引号的<字符,则会出现该错误消息。 "<user>"已经被引用,因此通常不应该是一个问题。问题必须源于%SETTINGSPATH%中包含的价值。值必须具有未加引号且未转义的<,或者值中必须包含奇数引号。奇数引号会导致<user>不再被引用。

唯一的另一种可能性是你没有向我们展示你的所有代码,并且错误发生在其他地方。

答案 1 :(得分:0)

这永远不会可靠。原因是您尝试使用错误的工具处理Xml。 Xml文档中有无数个文本表示具有相同的语义含义。因此,这里的空格或新行不会改变文档的语义,但会破坏您的脚本,即使以Xml处理输入的所有工具都将继续正常工作。使用PowerShell或vbscript / jscript你可以使用Xml功能,否则你总会遇到这样的问题,因为你不应该使用刷子来驱动螺丝。