0

我正在使用他们的“SOAP”api 与 Magento 电子商务集成,并且 API 返回“XML”结果。问题是,这并不总是格式正确:

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

在这种特定情况下,价格常规属性在属性文本中既有不可见字符 0xa0(在 span 标记之前),又有 < >。

我似乎无法从 Magento 获得格式正确的 XML,因此另一种方法是在将其提供给XmlSerializer反序列化之前对其进行清理:

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

我可以使用简单的文本替换来摆脱不可见字符,但我更不确定属性文本中的 <>。

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

4

1 回答 1

1

字符 0x3c 是<字符。对于不可见的字符,您宁愿寻找像 0x09 TAB 字符这样的东西。

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

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

只要spanXML 代码本身中没有任何元素(具有三个字符的内容),这种方法就可以工作。您可以对其他 HTML 标记进行类似的替换,但尽量使模式保持特定,以避免误报。

于 2013-01-22T09:03:16.877 回答