【问题标题】:XDocument Elements - Remove tagsXDocument 元素 - 删除标签
【发布时间】:2017-12-08 09:12:53
【问题描述】:

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

<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>

我遇到的问题是品牌和子品牌列表。所有其他值(例如名称、描述等)都可以,并且在返回时没有它们的元素“标签”。但是,品牌/子品牌看起来像这样。

  <Brands>Brand1</Brands>

我只需要“Brand1”位。

这就是我绑定 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; }
}

我知道我可以使用一些正则表达式来删除标签,但是还有其他方法可以即时执行此操作吗...?

提前致谢。 :)

【问题讨论】:

  • 不确定使用的技术,但您可以尝试from b in xml.Elements("Brands/text()")
  • @localghost Elements() 需要 XName,它是命名空间和本地名称的组合,但不是 XPath...
  • 安迪,我删除了sql 标签并添加了C#,因为这似乎与sql 无关。不过,这可能是一种方法(取决于底层的 RDBMS)将 XML 按原样 交给数据库并将其切碎......

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


【解决方案1】:

应该足以阅读.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];

【讨论】:

  • 你,先生............是一个传奇......!你救了我免于扯掉我的头发..!!感谢您的迅速回复。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多