【问题标题】:unexpected character while parsing XML from batch script从批处理脚本解析 XML 时出现意外字符
【发布时间】:2012-10-18 14:11:35
【问题描述】:

当我尝试从批处理脚本解析 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”,在某些机器上我得到了这个值;但是有些机器没有显示这个值并显示这个错误。

请指导。

【问题讨论】:

    标签: xml-parsing cmd batch-file


    【解决方案1】:

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

    当您的 IN() 子句中有未转义和未引用的 &lt; 字符时,会出现该错误消息。 "&lt;user&gt;" 已经被引用,所以这通常不成问题。问题必须源于%SETTINGSPATH% 中包含的值。该值必须有一个未引用且未转义的&lt;,或者该值中必须有奇数个引号。奇数个引号将导致 &lt;user&gt; 不再被引用。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • '这永远不会可靠地工作' – 虽然 OP 的经验似乎确实证实了您的说法,但如果您详细说明为什么会更好> 这是不可靠的。
      • 我同意不应该使用批处理来解析 XML。但我看不出 XML 是如何导致报告的错误的。
      • @AndriyM - 添加了更多解释。
      猜你喜欢
      • 2020-07-22
      • 2022-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      相关资源
      最近更新 更多