XML解析:检查字符串C++; 我编写了一个简单的C++ shell程序来解析大型XML文件并修复语法错误。

XML解析:检查字符串C++; 我编写了一个简单的C++ shell程序来解析大型XML文件并修复语法错误。,c++,xml,parsing,string,C++,Xml,Parsing,String,到目前为止,我已经涵盖了所有我能想到的东西,例如,除了字符串中的字符串 <ROOT> <NODE attribute="This is a "string within" a string" /> <ROOT> 甚至有可能吗?我认为很难决定属性的结束和另一个属性的开始。我认为您需要限制您可以解析的可能输入,否则您将遇到类似以下情况的不明确情况: <ROOT> <NODE attribute="This is a "string wi

到目前为止,我已经涵盖了所有我能想到的东西,例如,除了字符串中的字符串

<ROOT>
  <NODE attribute="This is a "string within" a string" />
<ROOT>

甚至有可能吗?

我认为很难决定属性的结束和另一个属性的开始。我认为您需要限制您可以解析的可能输入,否则您将遇到类似以下情况的不明确情况:

<ROOT>
  <NODE attribute="This is a "string within" a string" attribute2="This is another "string within" a string" />
<ROOT>

这是两个属性或一个属性


您可以做的一个假设是,在相等数量的双引号和等号之后,新属性开始。然后用转义字符串替换所有内部双引号。或者两个或更多双引号后的任何等号表示新属性。节点的结尾也是如此。

我认为很难决定属性的结尾和另一个属性的开始。我认为您需要限制您可以解析的可能输入,否则您将遇到类似以下情况的不明确情况:

<ROOT>
  <NODE attribute="This is a "string within" a string" attribute2="This is another "string within" a string" />
<ROOT>

这是两个属性或一个属性


您可以做的一个假设是,在相等数量的双引号和等号之后,新属性开始。然后用转义字符串替换所有内部双引号。或者两个或更多双引号后的任何等号表示新属性。对于节点的末尾也可以假设相同的情况。

更好的解决方案是在创建此类错误之前修复它们。XML设计得非常严格,以避免进行此类猜测。如果XML无效,您唯一应该做的就是拒绝它,并输出一条有用的错误消息

谁会说你的更正:

<NODE attribute="This is a &quot;string within&quot; a string" />

<NODE attribute="This is a " string-within=" a string" />

显然,理解英语的好处是,我们可以非常肯定它是前者,但是当你采用自动化的方法处理它时,就无法确定你没有掩盖更严重的错误


修复转义问题的地方是在创建xml文件时

更好的解决方案是在创建此类错误之前修复它们。XML设计得非常严格,以避免进行此类猜测。如果XML无效,您唯一应该做的就是拒绝它,并输出一条有用的错误消息

谁会说你的更正:

<NODE attribute="This is a &quot;string within&quot; a string" />

<NODE attribute="This is a " string-within=" a string" />

显然,理解英语的好处是,我们可以非常肯定它是前者,但是当你采用自动化的方法处理它时,就无法确定你没有掩盖更严重的错误


修复转义问题的地方是在创建xml文件时

问题是我无法控制XML是如何生成的,它是这样给我的,我必须自己修复它。这不是一个大问题,但我希望尽可能多地实现自动化。问题是我无法控制XML是如何生成的,它是这样交给我的,我必须自己修复它。这不是一个大问题,但我想尽可能地自动化。