【发布时间】: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