2017-11-13 6 views
1

이것은 내 XML 파일입니다.내부 태그와 내부 요소가있는 XML 문서를 비 직렬화하는 방법은 무엇입니까?

<getMetadata> 
<Project Name="Doors_Demo"> 
    <Module FullPath="/Doors_Demo/Test_Module2"> 
    <Attributes> 
    <Attribute name="TableType" type="TableType" /> 
    <Attribute name="TableTopBorder" type="TableEdgeType" /> 
    </Attributes> 
    </Module> 
</Project> 
</getMetadata> 

내가 위의 XML 아래

를 직렬화하는 것은 내 코드입니다 : 나는 목록에 내 XML을 직렬화하는

[XmlRoot("getMetadata")] 
public class RootClass 
{ 
    public Project element_Project; 

    [XmlElement("Project")] 
    public Project Project 
    { 
     get { return element_Project; } 
     set { element_Project = value; } 
    } 
} 

public class Project 
{ 
    public string name; 

    [XmlAttribute("Name")] 
    public string Id 
    { 
     get { return name; } 
     set { name = value; } 
    } 
} 

public static void Main(string[] args) 
{ 
    RootClass obj = new RootClass(); 

    XmlSerializer serializer = new XmlSerializer(typeof(RootClass)); 
    using (FileStream stream = new FileStream(@"E:\getMetadata(4).xml", FileMode.Open)) 
    { 
     RootClass myxml = (RootClass)serializer.Deserialize(stream); 

     Console.WriteLine(myxml.Project.name); 
    } 
} 

, 나는 모든 내부 요소에 액세스 할 수 없습니다 오전 루트 요소 내부의 특성

액세스 할 수있는 목록에 모듈 요소와 내부 요소 및 태그의 세부 정보를 원합니다.

+1

'속성'이라는 요소가있는 문서의 경우 puke-emoji ... –

답변

2

다음은 XML에서 클래스를 자동으로 생성하는 약간의 기법입니다.

먼저 빈 클래스를 새로 만들고 이름을 TempXml으로 지정합니다.

XML을 클립 보드에 복사하고 방금 만든 새 빈 클래스를 엽니 다. 비주얼 스튜디오

이동 편집 클래스으로 메뉴 다음 붙여 넣기붙여 넣기 XML :

Paste XML as Classes

이것은 다음과 같은 코드를 생성합니다

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 
public partial class getMetadata 
{ 

    private getMetadataProject projectField; 

    /// <remarks/> 
    public getMetadataProject Project 
    { 
     get 
     { 
      return this.projectField; 
     } 
     set 
     { 
      this.projectField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class getMetadataProject 
{ 

    private getMetadataProjectModule moduleField; 

    private string nameField; 

    /// <remarks/> 
    public getMetadataProjectModule Module 
    { 
     get 
     { 
      return this.moduleField; 
     } 
     set 
     { 
      this.moduleField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string Name 
    { 
     get 
     { 
      return this.nameField; 
     } 
     set 
     { 
      this.nameField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class getMetadataProjectModule 
{ 

    private getMetadataProjectModuleAttribute[] attributesField; 

    private string fullPathField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlArrayItemAttribute("Attribute", IsNullable = false)] 
    public getMetadataProjectModuleAttribute[] Attributes 
    { 
     get 
     { 
      return this.attributesField; 
     } 
     set 
     { 
      this.attributesField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string FullPath 
    { 
     get 
     { 
      return this.fullPathField; 
     } 
     set 
     { 
      this.fullPathField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class getMetadataProjectModuleAttribute 
{ 

    private string nameField; 

    private string typeField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string name 
    { 
     get 
     { 
      return this.nameField; 
     } 
     set 
     { 
      this.nameField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string type 
    { 
     get 
     { 
      return this.typeField; 
     } 
     set 
     { 
      this.typeField = value; 
     } 
    } 
} 

을 어느해야 XmlSerializer 클래스로 잘 작동하십시오.

비어있는 설명을 제거하고 낙타의 경우를 사용하도록 클래스의 이름을 변경하여 생성 된 출력을 약간 정리할 수 있습니다 (이 경우 속성에서 실제 요소 이름을 지정해야합니다. 귀하의 질문) 또는 클래스를 다른 파일로 이동하십시오.

희망이 있습니다.

+0

프로젝트 이름 만 가져올 수 있으며 모듈 이름과 XML에서 속성을 가져오고 싶습니다. 어떻게해야합니까? – Abby