2013-07-09 1 views
0

xml을 사전으로 변환해야합니다. 나는 전에 그것을 한 적이 없다. 어떻게 이런 식으로 값을 얻기 위해 사전에이 XML을 변환하는 나에게 코드 예제를 보여 주시겠습니까 :C# 하나의 속성 및 여러 엘름 값을 얻기 위해 xml을 사전으로 변환하는 방법

<root> 
    <Vendor name = "BankRed"> 
     <CustRef>dfas16549464</CustRef> 
     <InvP> 1, 12</InvP> 
    </Vendor> 
</root> 

당신의 도움이 이해할 수있을 것이다 :

여기
Key: Vendor and Value: BankRed 
Key: CustRef and Value: dfas16549464 
Key: InvP and Value: 1, 12 

하는 XML이다. 고마워요! 코드 아래 사용

+0

시도해 보셨습니까? –

+0

사전 키는 무엇이고 사전 값은 무엇입니까? – rajeemcariazo

+0

@rajeem_cariazo KEY - 공급 업체 VALUE - bankRed .... KEY - CustRef VALUE - dfas16549464 .... KEY InP VALUE - 1,12 – user1358072

답변

-3

시도 : 내가 코드를 writen하고 테스트 한

Dictionary<int, string> elements = xml.Elements(ns + "root") 
     .Select(sp => new { 
           CustRef = (string)(sp.Attribute("CustRef")), 
           vendor = (string)(sp.Attribute("Vendor")) 
          }) 
     .ToDictionary(sp => sp.CustRef, sp => sp.Vendor); 
+0

'CustRef'는 int가 아닌 문자열입니다 – DGibbs

+0

고마워요 DGibbs 수정 됨 – Jack

+0

사전에 여전히 'int'는'Key' 타입으로 – DGibbs

1

. 사전의 사용에 대한 클래스의 엔티티 : 나는 당신의 questiong 당신이 그것을 필요로하는 이유에 명확하지 않습니다하지만 당신이 필요로하는 무슨 희망

공용 클래스 엔티티 { 개인 문자열 CustRef; 개인 문자열 InvP;

public Entity(string custRef, string invP) 
    { 
    CustRef = custRef; 
    InvP = invP; 
    } 
} 

과 변환 코드 :

 Dictionary<string, Entity> myTbl = new Dictionary<string, Entity>(); 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(@"d:\meXml.xml"); 
    XmlNode root = doc.FirstChild; 
    foreach (XmlNode childNode in root.ChildNodes) 
    { 
     myTbl[childNode.Attributes[0].Value] = new Entity(
      childNode.FirstChild.InnerText, 
      childNode.LastChild.InnerText); 
    } 
2

난 당신이 조금 명확히 함께 할 수 있다고 생각하지만, 그래도 공급 업체가 공급 업체 섹션의 키해야 이름을 속성 가정 원하는 효과를 달성

,882,485,184 : 당신은

XDocument xml = XDocument.Load("path to your xml file"); 

var dict = xml.Descendants("Vendors") 
       .Elements() 
       .ToDictionary(r => r.Attribute("name").Value, r => r.Value); 

XML 구조를 가정 명확하지 않은

  • dfas16549464 1, 12
  • : BankBlue
  • :
  • 을 BankRed - :

    당신처럼 보이는 Dictionary<string, string>이 가진 요소를 얻을 것이다 : foo bar

그러나 나는 잘못된 접근 방식을 사용하고 있다고 생각합니다.

public class Vendor 
{ 
    public Vendor() 
    { } 

    public string CustRef { get; set; } 
    public string VendorName { get; set; } 
    public string InvP { get; set; } 
} 

그리고 쿼리가 될 것입니다 : 더 나은 아이디어는 예를 들어,이 정보를 저장하는 사용자 정의 유형 Vendor을 생성하는 것입니다 당신에게보고 Vendor의 목록을 줄 것이다

var query = (from n in xml.Descendants("Vendors") 
      select new Vendor() 
      { 
       VendorName = n.Element("Vendor").Attribute("name").Value, 
       CustRef = n.Descendants("Vendor").Select(x => x.Element("CustRef").Value).SingleOrDefault(), 
       InvP = n.Descendants("Vendor").Select(x => x.Element("InvP").Value).SingleOrDefault() 
      }).ToList(); 

같은 :

enter image description here

이제 데이터로 작업하기가 훨씬 쉽다.

+0

+1하지만 Xml을 직렬화하고 역 직렬화 할 수있는 API가 있습니다. OP가 잠시 동안 검색한다면, 그는 그것을 찾을 수있을 것입니다. :) –

관련 문제