XDocument Elements - 删除标签

时间:2017-12-08 09:12:53

标签: c# xml linq-to-xml xml-serialization

我目前正在将有效XML文件中的值导入SQL数据库。下面是xml的片段。

<Suppliers>
    <SupplierDetails>
      <Name>Some Name</Name>
      <Logo>my-logo.jpg</Logo>
      <ID>4070</ID>
      <DateCertified>14/10/2016 00:00:00</DateCertified>
      <Description>Some description</Description>
      <Brands>Brand1</Brands>
      <Brands>Brand2</Brands>
      <Brands>Brand3</Brands>
      <Brands>Brand4</Brands>
      <SubBrands>SubBrand1</SubBrands>
      <SubBrands>SubBrand2</SubBrands>
      <SubBrands>SubBrand3</SubBrands>
      <SubBrands>HVAC</SubBrands>
    </SupplierDetails>
</Suppliers>

我遇到的问题是品牌和子品牌列表。所有其他值,如名称,描述等都很好,并返回没有他们的元素&#34;标签&#34;。但是,Brands / SubBrands看起来像这样。

  <Brands>Brand1</Brands>

我只需要&#34; Brand1&#34;位。

这就是我绑定我的ViewModel

的方式
var model =
  from xml in xmlDoc.Descendants("SupplierDetails")
            select new SupplierViewModel
            {                    
                Name            = xml.Element("Name").ToString(),
                Logo            = xml.Element("Logo").ToString(),
                Supplier_Id     = (int)xml.Element("ID"),
                DateCertified   = xml.Element("DateCertified").ToString(),
                Description     = xml.Element("Description").ToString(),
                Brands          = (from b in xml.Elements("Brands") select b.ToString()).ToList(),
                SubBrands       = (from sb in xml.Elements("SubBrands") select sb.ToString()).ToList()
            };

我的ViewModel

public class SupplierViewModel
{
    public int Id { get; set; }

    // XML Elements
    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("LOGO")]
    public string Logo { get; set; }

    [XmlElement("ID")]
    public int Supplier_Id { get; set; }

    [XmlElement("DateCertified")]
    public string DateCertified { get; set; }

    [XmlElement("Description")]
    public string Description { get; set; }       

    [XmlElement("Brands")]
    public List<string> Brands { get; set; }

    [XmlElement("SubBrands")]
    public List<string> SubBrands { get; set; }
}

我知道我可以使用一些RegEx删除标签,但有没有其他方法可以实时执行此操作...?

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

应该足以阅读.Value而非使用.ToString()

    string xmlString = "<Suppliers><SupplierDetails><Name>Some Name</Name><Brands>Brand1</Brands><Brands>Brand2</Brands></SupplierDetails></Suppliers>";
    var xmlDoc = XDocument.Parse(xmlString);
    var model =
      from xml in xmlDoc.Descendants("SupplierDetails")
      select new SupplierViewModel {
          Name = xml.Element("Name").ToString(),
          Brands = (from b in xml.Elements("Brands") select b.Value).ToList(),
      };
    var YourModel = model.ToList()[0];