0

「SOAP」APIを使用してMagentoeコマースと統合していますが、APIは「XML」の結果を返します。問題は、これが常に整形式であるとは限らないことです。

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

この特定のケースでは、価格の通常の属性には、非表示の文字0xa0(スパンタグの前)と、属性テキスト内の<>の両方が含まれています。

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は<文字です。見えない文字の場合は、0x09TAB文字のようなものを探します。

壊れたマークアップを修正するには、正規表現を使用してコンテンツ内の特定のHTMLタグを検索し、タグ内の任意の通貨を許可します。

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

spanこれは、3文字のコンテンツを持つXMLコード自体に要素がない限り機能します。他のHTMLタグに対しても同様の置換を行うことができますが、誤検知を避けるために、パターンをできるだけ具体的に保つようにしてください。

于 2013-01-22T09:03:16.877 に答える