2016-12-07 14 views
1

異なるベンダから来たxmlファイルを処理する必要があります。残念ながら、ファイルにはわずかな不一致があります。最初のバージョンでは、ルート名にxmlns値があります。他のベンダーは、このxmlns値をルートに提供しません。XML属性の不一致の処理

<featureCarouselSlide xmlns="uuid:c8b59c95-7a55-4e8e-b31e-f58e5fce0467"> 
    <title>Aputoiminnot ovat </title> 
    <text>Kun pyrimme uudistamaan koulutusta maailmanlaajuisella tasolla, meillä on ainutlaatuinen tilaisuus vaikuttaa myönteisesti invalidien ja kyvyiltään rajoitettujen ihmisten oppimismahdollisuuksiin. Tämä edellyttää, että huomioimme aputoiminnot kaikessa toiminnassamme.</text> 
    <label> 
    <bodyText>Aputoiminnot ovat<br xmlns="http://www.w3.org/1999/xhtml" />olennainen osa palveluitamme ja tuotteitamme.</bodyText> 
    </label> 
</featureCarouselSlide> 

ので、私のようなクラスにXMLデータをモデル化しようとすると:

[Serializable()] 
    [XmlRoot(ElementName = "featureCarouselSlide", Namespace = "uuid:c8b59c95-7a55-4e8e-b31e-f58e5fce0467")] 
    public class FeatureCarouselSlide: Models.TridionModel 
    { 
[XmlElement(ElementName = "title")] 
     public string Title { get; set; } 

     [XmlElement(ElementName = "text")] 
     public RichText Text { get; set; } 

     [XmlElement(ElementName = "subText")] 
     public string SubText { get; set; } 
} 

それは私のxmlはのxmlnsの属性値を持っている場合のみ動作しますが、他で失敗した場合。これをC#でどのように解決できますか?

答えて

1

XmlTextReader.Namespacesプロパティをfalseに設定します。

FeatureCarouselSlide fcs; 
var xs = new XmlSerializer(typeof(FeatureCarouselSlide)); 

using (var reader = new XmlTextReader("test.xml")) 
{ 
    reader.Namespaces = false; 
    fcs = (FeatureCarouselSlide)xs.Deserialize(reader); 
} 

クラス内の名前空間を削除します。

[XmlRoot(ElementName = "featureCarouselSlide")] 
public class FeatureCarouselSlide 
+0

問題は、この名前空間が必要な時があることです。 – user843681

3

(この語彙の仕様は何と言っていますか?)正しいどのバージョンを決定します。次に、あなたに悪いデータを送信しているサプライヤーに戻って、あなたが送るかもしれない他の欠陥製品と同じ方法でそれを扱います。ネームスペースを修正するためにXSLT変換を実行して到着時にデータを修復することができます。いずれの場合でも、すべてのアプリケーションで2つの異なるデータ形式を処理すると、すべてが複雑になるため、悪いデータをメインシステムに使用しないでください。

0

最終的には、ベンダーからxmlファイルをクリーンアップしました。

関連する問題