代码之家  ›  专栏  ›  技术社区  ›  Maury Markowitz

使用带引号的属性分析XML

  •  1
  • Maury Markowitz  · 技术社区  · 9 年前

    我正在使用第三方XML解析器(不是我的决定),发现它做了一些不好的事情。以下是XML标记的内部部分:

    "Date=""2014-01-01"" Amounts=""100717.72 100717.72 100717.72 100717.72"""
    

    .split

    我有解析器的C#代码,并考虑用其他字符替换引号内的空格,拆分,然后将它们改回原处。但我想我应该先问一下。

    有没有办法将文本正确地解析为两个条目?

    原始XML如下(请原谅,从另一台计算机键入)

    <DetailAmounts Date="2014-01-01" Amounts="100717.72 100717.72 100717.72 100717.72" />
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Xiaoy312    9 年前

    你应该使用 XmlSerializer

    public class DetailAmounts
    {
        [XmlAttribute]
        public DateTime Date { get; set; }
        [XmlAttribute]
        public string Amounts { get; set; }
    }
    
    // ...
    
    var xml = "<DetailAmounts Date=\"2014-01-01\" Amounts=\"100717.72 100717.72 100717.72 100717.72\" />";
    var serializer = new XmlSerializer(typeof(DetailAmounts));
    using (var reader = new StringReader(xml))
    {
        var detailAmounts = (DetailAmounts)serializer.Deserialize(reader);
    }
    

    或者,您可以使用 XElement 要分析每个单独的值:

    var xml = "<DetailAmounts Date=\"2014-01-01\" Amounts=\"100717.72 100717.72 100717.72 100717.72\" />";
    var element = XElement.Parse(xml);
    var detailAmounts = new
    {
        Date = (DateTime)element.Attribute("Date"),
        Amounts = element.Attribute("Amounts").Value.Split(' ')
            .Select(x => decimal.Parse(x, CultureInfo.InvariantCulture))
            .ToArray()
    };
    
    推荐文章