2011-02-16 4 views
0

XmlSerializer를 사용하여 구성 파일을 역 직렬화합니다. Xml 요소의 하위 내용을 문자열 필드로 가져올 수 있어야합니다. 이 하위 내용은 XML 자체 일 수 있습니다.Xml 내용을 문자열로 역 직렬화하는 방법

간단한 예 :

public class Configuration 
{ 
    [XmlAttribute] 
    public string MyAttribute { get; set; } 

    [XmlText] 
    public string Content { get; set; } 
} 

나는 다음과 같은 구문 분석을 시도하고있다 :

<Configuration MyAttribute="foo"> 
    <SomeOtherXml /> 
</Configuration> 

내가 Content 속성이 "<SomeOtherXml />"로 설정해야하지만이 얻을 수없는 것 싶어요 작업. 나는 CDATA 또는 그 안에 내용을 캡슐화하고 싶지 않습니다.

가능합니까? 아니면 구성 파일의 구문 분석을 수동으로 처리해야합니까?

감사

+0

정규식을 사용하여 구문 분석 할 수 있지만 이미 알고 있다고 생각합니다. –

+0

@Duncan - 왜 xml 요소가 호출되는지 신경 써야합니까? 원하는 경우 Content 속성의 이름을 "SomeOtherXml"로 지정할 수 있습니다. –

+0

@Ramhound - Xml 요소가 호출되는 것에 상관하지 않습니다. Content 속성의 ** value **를'' ''로하고 싶습니다. –

답변

1

XmlSerializer가를 사용할 수 있지만 결국 그것을 가치가되지 않을 수 있습니다 수동 구문 분석을 요구하는 것은 가능하다.

이 작업을 수행하는 다른 방법이있을 수 있지만이 작업을 수행하는 방법은 구성 클래스에 IXmlSerializable 인터페이스를 구현하는 것입니다.

public class Configuration : IXmlSerializable 
{ 
    [XmlAttribute] 
    public string MyAttribute { get; set; } 

    [XmlText] 
    public string Content { get; set; } 

    public void ReadXml(XmlReader reader) 
    { 
     if(reader.NodeType == XmlNodeType.Element && 
      string.Equals("Configuration", reader.Name, StringComparison.OrdinalIgnoreCase)) 
     { 
      MyAttribute = reader["MyAttribute"]; 
     } 

     if(reader.Read() && 
      reader.NodeType == XmlNodeType.Element && 
      string.Equals("SomeOtherXml", reader.Name, StringComparison.OrdinalIgnoreCase)) 
     { 
      Content = reader.ReadOUterXml(); //Content = "<SomeOtherXml />" 
     } 
    } 

    public void WriteXml(XmlWriter writer) { } 
    public XmlSchema GetSchema() { } 
} 

희망이 있습니다.

관련 문제