我使用他们的“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?
答案 0 :(得分:1)
字符0x3c是<
个字符。对于隐形字符,您宁愿寻找类似0x09 TAB字符的内容。
要修复损坏的标记,您可以在内容中查找该特定HTML标记,使用正则表达式来允许标记中的任何货币:
xml = Regex.Replace(xml, "<span>([A-Za-z]{3})</span>", "<span>$1</span>");
只要XML代码本身没有任何span
元素,并且具有三个字符的内容,这就可以工作。您可以对其他HTML标记执行类似的替换,但尽量保持模式尽可能具体,以避免误报。