2017-12-08 8 views
0

현재 올바른 XML 파일의 값을 SQL 데이터베이스로 가져옵니다. 아래는 XML 스 니펫입니다.XDocument 요소 - 태그 제거

<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/SubBrands는 이와 같이 보입니다.

<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() 
      }; 

그리고 내 뷰 모델을 결합하고있어 어떻게

이는 내가 태그를 제거하는 정규식의 비트를 사용할 수 있습니다 알고 있지만 다른 방법이

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

이 작업을 진행하는 중 ...?

미리 감사드립니다. :) (

+0

확실하지 사용의 .Value을 읽을 충분해야한다, 그러나 당신은 B에서 xml.Elements에서 ("브랜드/텍스트 '같은 것을 시도해 볼 수도 있습니다 ")'. – localghost

+0

@localghost'Elements()'는 네임 스페이스와 로컬 이름의 조합이지만'XPath'가 아닌'XName'을 기대합니다 ... – Shnugo

+0

Andy,'sql' 태그를 제거하고'C# '를 이것은'sql'과 실제로 관련이없는 것 같습니다. XML을 그대로 데이터베이스에 넘기고 거기에 파쇄하는 접근 방식이 될 수 있습니다. (기본 RDBMS에 따라 다름) ... – Shnugo

답변

0

대신 사용되는 기술에 .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]; 
+0

당신, 선생님 ..... ... 전설입니다 ..! ! 너는 내 머리카락을 찢어 내지 못하게했다. !! 빠른 답장을 보내 주셔서 감사합니다. :) – AndyPoole