C\#XML 과 역 직렬 화 된 예제 분석

3948 단어 c#xml역 직렬 화
이번 에는 웹 서 비 스 를 기반 으로 한 인 터 페 이 스 를 기록 하기 위해 상대방 이 전송 한 xml 문자열 을 분석 합 니 다.실제 사용 할 때 발생 하 는 문제 들
전 송 된 xml 형식 은 다음 과 같 습 니 다.

<?xml version="1.0" encoding="UTF-8"?>
<messages xmlns="http://www.test.com/hit/rhin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/hit/rhin file:///e:/request_message.xsd">
    <heartbeat/>
    <switchset></switchset>
    <business>
        <datasets>
            <setdetails>
                <WS02_01>  </WS02_01>
            </setdetails>
            <setdetails>
                <WS02_01>  </WS02_01>
            </setdetails>
        </datasets>
    </business>
</messages>
  • xmlns 는 기본 네 임 스페이스 로 네 임 스페이스 가 있 는 경우 XmlNamespaceManager 를 사용 하여 처리 해 야 합 니 다
  • xmlns:xsi 는 네 임 스페이스 접두사 xsi 에 대응 하 는 유일한 문자열 www.w3.org/2001/XMLsch 를 정의 합 니 다.또한 이 xmlns:xsi 는 서로 다른 xml 문서 에 나타 날 것 같 습 니 다.이것 은 xsi 가 업계 에서 기본적으로 XSD(XML Schema Definition)파일 에 사용 되 는 네 임 스페이스 가 되 었 기 때문이다.XSD 파일(Schema 파일 이 라 고도 함)은 xml 문서 구 조 를 정의 하 는 데 사 용 됩 니 다.
  • XML 해상도 기 는 하나의 XSD 파일 의 내용 에 따라 다른 XML 파일 을 분석 하여 이 파일 의 구조 가 XSD 파일 에서 정의 한 것 과 일치 하 는 지 판단 할 수 있 습 니 다.XSD 파일 은 XML 문서 가 사용자 정의 할 수 있 는 문법 이나 형식 검사 기로 이해 할 수 있 습 니 다.
  • xsi:schema Location 는 빈 칸 으로 분 리 된 키 쌍 입 니 다.앞의 키 는 www.test.com/hit/rhin 은 네 임 스페이스 이 고 전체 국면 에서 유일한 문자열 입 니 다.다음 값 은 XSD location URI 입 니 다.이 값 은 이전 네 임 스페이스 에 대응 하 는 XSD 파일 의 위 치 를 표시 합 니 다.xml parser 는 이 정 보 를 이용 하여 XSD 파일 을 얻 을 수 있 고 XSD 파일 을 통 해 네 임 스페이스 www.test.com/hit/rhin 에 속 하 는 모든 요소 구 조 를 검사 할 수 있 기 때문에 이 값 은 반드시 접근 할 수 있 습 니 다.또한 접근 한 내용 은 XSD 파일 의 내용 입 니 다
  • 구현 코드:
    
        //  xml
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(XMLData);
        //      
        XmlNamespaceManager m = new XmlNamespaceManager(xml.NameTable);   
        m.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        m.AddNamespace("d", "http://www.test.com/hit/rhin"); //d        
        
        //      ,        m
        XmlNodeList dataNodeList = xml.SelectNodes("d:messages/d:business/d:datasets/d:setdetails", m);
        if (dataNodeList != null && dataNodeList.Count > 0)
        {
            for (int i = 0; i < dataNodeList.Count; i++)
            {
                var model =  XmlToEntity<TestModel>(dataNodeList[i].OuterXml,"http://www.test.com/hit/rhin");
            }
               
        }
    
    XmlToEntity 방법 은 xml 를 Model 실체 에 역 정렬 합 니 다.
    
        privated T XmlToEntity<T>(string xml, string nameSpace)
        {
            T obj = default(T);
            try
            {
                XmlRootAttribute root = new XmlRootAttribute("setdetails");
                root.Namespace = nameSpace;//        
                XmlSerializer serializer = new XmlSerializer(typeof(T),root);
    
                StringReader sr = new StringReader(xml);
                obj = (T)serializer.Deserialize(sr);
                sr.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return obj;
        }
    
    실체 정의 도 네 임 스페이스 를 설명해 야 합 니 다.
    
        [XmlRoot(Namespace = "http://www.test.com/hit/rhin", IsNullable = false, ElementName = "setdetails")]
        [Table("TAB_TEST")]
        public class TestModel
        {
            [XmlElement("WS02_01")]
            public string  NEIRONG { get; set; }
        }
    
    이상 은 C\#XML 과 반 직렬 화 된 예제 에 대한 상세 한 내용 입 니 다.C\#XML 과 반 직렬 화 된 자 료 를 분석 하 는 것 은 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기