2016-11-21 4 views
1

Visual Studio의 xml에서 C# 기능을 사용하면 xml 마크 업을 C# 클래스로 변환 할 수 있습니다.C# Visual Studio 생성 클래스를 사용하여 xml 마크 업을 포함한 XML 노드의 모든 텍스트 가져 오기

<books> 
<book name="Book-1"> 
<author> 
<name>Author-1<ref>1</ref></name> 
</author> 
</book> 
<book name="Book-2"> 
<author> 
<name>Author-1<ref>1</ref></name> 
</author> 
</book> 
</books> 

변환 된 클래스는 포함

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
    public partial class booksBookAuthorName 
    { 
     private byte refField;  // 1 

     private string[] textField; // 2 

우리가 태그를 유지하여, 저자의 이름을 읽을 때 출력으로 Author-1<ref>1</ref>이다 필요한 것.

우리는 https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmltextattribute(v=vs.110).aspx 속성을 시도했습니다. 하지만 희망은 없습니다.

모든 단서 ??

답변

0

당신은에 각 저자의 <name> 노드의 XML을 캡처 [XmlAnyElement("name")]를 사용할 수있는 XmlElement (또는 XElement). 당신이 원하는 정확한 텍스트는 그 요소의 InnerXml입니다 :

[XmlRoot(ElementName = "author")] 
public class Author 
{ 
    [XmlAnyElement("name")] 
    public XmlElement NameElement { get; set; } 

    [XmlIgnore] 
    public string Name 
    { 
     get 
     { 
      return NameElement == null ? null : NameElement.InnerXml; 
     } 
     set 
     { 
      if (value == null) 
       NameElement = null; 
      else 
      { 
       var element = new XmlDocument().CreateElement("name"); 
       element.InnerXml = value; 
       NameElement = element; 
      } 
     } 
    } 
} 

이는 booksBookAuthorName 클래스에 대한 필요가 없습니다.

예제 fiddlehttp://xmltocsharp.azurewebsites.net/에서 처음 생성 된 XML에 해당하는 클래스의 전체 집합을 비 직렬화 한 다음 필요에 따라 Author을 수정했습니다.

+0

고맙습니다. :) – sreenivasulu