0

当我尝试从批处理脚本解析 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>

批处理脚本:

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

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

请指导。

4

2 回答 2

2

用批处理解析 XML 通常是有问题的并且总是有风险的。一个有效的 XML 文档可以通过多种方式合法地重新格式化,这会破坏您的解析器。但是如果你真的想继续使用批处理...

<当您的 IN() 子句中有未转义和未引用的字符时,会出现该错误消息。已经引用了"<user>",所以通常不应该是一个问题。问题必须源于%SETTINGSPATH%. 该值必须具有 unquoted 和 unscaped <,或者该值中必须有奇数个引号。奇数个引号将导致<user>不再被引用。

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

于 2012-10-18T16:04:03.447 回答
0

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

于 2012-10-18T15:25:40.223 回答