.NET

2009-08-26 3 views
0

에서 XML 파일에서 컬렉션을 채우는 가장 쉬운 방법 나는 다음과 같은 XML 파일이 있습니다.NET

<?xml version="1.0" encoding="utf-8" ?> 
<scripts> 
    <ScriptName> 
    <name> 
     "My Name" 
    </ScriptName> 
    <ScriptBody> 
     "body contents" 
    </ScriptBody> 
    </script> 
</scripts> 

그리고 다음 개체 다음을 채우는 가장 빠른 방법은 무엇

public class DbScript 
{ 
    #region Constructors 
    public DbScript() 
     : this(string.Empty, string.Empty) 
    { 
    } 
    public DbScript(string name, string body) 
    { 
     ScriptName = name; 
     ScriptBody = body; 
    } 
    #endregion 
    #region Properties 
    /// <summary> 
    /// Script name 
    /// </summary> 
    public string ScriptName { get; set; } 
    /// <summary> 
    /// Script body 
    /// </summary> 
    public string ScriptBody { get; set; } 
    #endregion 
} 

을 XML 파일의 내용에서 DBScript 개체를 수집합니까? 시리얼 라이저를 조사해야할까요?

감사합니다.

+0

귀하의 XML에 대한 형식이 올바르지 않습니다. 잘 구성된 XML이 없다면 전혀 할 수 없을 것입니다. –

답변

3

에 대한 트릭을 할 것입니다. 당신이 (내가 조금 편집하는) 당신의 XML을 경우

public class Scripts 
{ 

    /// <summary> 
    /// only allow xml serializer to create instances. 
    /// </summary> 
    private Scripts() 
    {   
    } 
    [XmlElement] 
    public List<script> script{ get; set; } 
} 
public class script 
{ 
    public script() 
    { 
    } 

    [XmlElement] 
    public string ScriptName { get; set; } 

    [XmlElement] 
    public string ScriptBody{ get; set; } 
} 

그리고 그 모두가 올바르게 설정되어있는 경우 다음이를 역 직렬화 할 수 있습니다

<?xml version="1.0" encoding="utf-8" ?> 
<scripts> 
    <script> 
    <ScriptName> 
     "My Name" 
    </ScriptName> 
    <ScriptBody> 
     "body contents" 
    </ScriptBody> 
    </script> 
</scripts> 

그런 다음 당신은 몇 가지 클래스를 생성을 XML을 나타냅니다 파일 :

string xmlFilePath = "THE_PATH_TO_THE_XML"; 
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Scripts)); 
using (XmlReader xmlReader = XmlReader.Create(xmlFilePath)) 
{ 
    Scripts scripts = (Scripts)xmlSerializer.Deserialize(xmlReader); 
} 

XML 직렬화 정말 강력하다, 워드 프로세서에서 체크 아웃 : http://msdn.microsoft.com/en-us/library/ms950721.aspx.

robb

+1

-1'XmlReader.Create' 대신'XmlTextReader'를 사용하고'using' 블록을 구현하지 않으려 고합니다. –

+1

네, XmlReader.Create는 그 길을 간파하고 있습니다. 그리고 using 문을 잘 잡아라. –

3

는 당신과 같이 XML 구문을 입력하는 의미 가정하면 :

<?xml version="1.0" encoding="utf-8" ?> 
<scripts> 
    <script> 
    <ScriptName> 
     "My Name" 
    </ScriptName> 
    <ScriptBody> 
     "body contents" 
    </ScriptBody> 
    </script> 
</scripts> 

그런 다음이 코드를 분석한다. 테스트되지 않았습니다.

var doc = XDocument.Load("input.xml"); 
var x = from script in doc.Descendants("scripts").Descendants("script") 
     select new { 
      Name = script.Element("ScriptName").Value, 
      Body = script.Element("ScriptBody").Value 
     }; 
2
var document = XElement.Load(fileName); 
    var collection = from elem in document.Elements("script") 
        select new DBScript(
            elem.Element("ScriptName").Value, 
            elem.Element("ScriptBody").Value 
           ); 

닷넷 직렬화를 사용하는 것은 절대적으로 당신이 객체에 파일을 역 직렬화 할이 경우 내 취향이다 나중에