清理xml文件 - 给定编码中的字符无效

时间:2013-01-22 08:56:52

标签: c# .net xml magento deserialization

我使用他们的“SOAP”api与Magento电子商务集成,API返回“XML”结果。问题是,这并不总是很好的形成:

<product>
   <entity_id>18</entity_id>
   <price regular="2925  <span>Nok</span>"/>
   ...

在这种特定情况下,price regular属性同时具有不可见字符0xa0(在span标记之前)和&lt; &GT;在属性文本中。

我似乎无法从Magento获得正确的格式良好的XML,所以替代方法是在我将其提供给XmlSerializer反序列化之前进行清理:

XmlSerializer serializer = new XmlSerializer(typeof(Responses.Product.product));
product = serializer.Deserialize(textReader) as Responses.Product.product;

我可以摆脱使用简单文本替换的隐形字符,但我更不确定&lt;&gt;在属性文本中。

我的问题是,如何将其清理为有效的XML?

1 个答案:

答案 0 :(得分:1)

字符0x3c是<个字符。对于隐形字符,您宁愿寻找类似0x09 TAB字符的内容。

要修复损坏的标记,您可以在内容中查找该特定HTML标记,使用正则表达式来允许标记中的任何货币:

xml = Regex.Replace(xml, "<span>([A-Za-z]{3})</span>", "&lt;span&gt;$1&lt;/span&gt;");

只要XML代码本身没有任何span元素,并且具有三个字符的内容,这就可以工作。您可以对其他HTML标记执行类似的替换,但尽量保持模式尽可能具体,以避免误报。