处理XML属性中的不一致

时间:2016-12-07 16:42:47

标签: c# xml

我必须处理来自不同供应商的xml文件。不幸的是,文件中存在轻微的不一致。在第一个版本中,根名称具有xmlns值。另一个供应商,并未在其根目录中提供此xmlns值。

<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#解决这个问题?

3 个答案:

答案 0 :(得分:3)

确定哪个版本正确(此词汇表的规格说明了什么?)。然后返回给您发送错误数据的供应商,并以与他们可能发送给您的任何其他有缺陷产品相同的方式对待它;或者通过执行XSLT转换来修复命名空间来修复到达时的数据。无论哪种方式,都不允许将不良数据导入主系统,因为让所有应用程序处理数据格式的两种不同变体会使一切变得更加复杂。

答案 1 :(得分: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

答案 2 :(得分:0)

我最终清理了供应商提供的xml文件。