【发布时间】:2013-01-22 08:56:52
【问题描述】:
我正在使用他们的“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?
【问题讨论】:
-
恐怕你拥有的不是XML。这是一个任意字符串。因此,您不能使用 XML 序列化程序来处理它。我建议您从根本上解决问题,在您的情况下是该字符串的生成。所有其他尝试,包括用替换和/或正则表达式清理它最终将把你引向深渊,你的代码总有一天会崩溃。
-
我不生成这个字符串,它是针对 Magento 的 SOAP 调用的结果。这是我必须使用的,不幸的是我无法修复字符串的提供者:(
-
不,这不是有效的 SOAP 调用。 SOAP 表示 XML。您在此处显示的内容与所谓的 XML 相去甚远。因此,除非您使用 HttpWebRequest 手动执行此调用并完全忽略您作为 SOAP 协议的响应而得到的错误,否则这不会发生在兼容的 SOAP 客户端上。
-
好的,所以 Magento 称它为 SOAP 和 XML,不管它是什么。不是我的错 Magento 太垃圾了 :) 不管他们怎么称呼它,这就是我必须使用的。
-
祝你好运。
标签: c# .net xml magento deserialization