2012-03-29 4 views
0

안녕하세요. 아래처럼 XML을 작성하여 문자열로 변환해야합니다.C# .Net에서 XMLDocument 빌드

XML의 값이 동적으로 변경됩니다.

의견이 있으십니까?

<?xml version='1.0' encoding='utf-8'?> 
<Message release='001' version='008' xmlns='http://www.ncpdp.org/schema/SCRIPT'> 
    <Header> 
    <To Qualifier='ZZZ'>xxxxxxx</To> 
    <From Qualifier='ZZZ'>xxxxxxx</From> 
    <MessageID>xxxxxx</MessageID> 
    <SentTime>2002-09-30T08:15:22</SentTime> 
    <Security> 
     <UsernameToken> 
     <Username/> 
     </UsernameToken> 
     <Sender> 
     <SecondaryIdentification>xxxxxxxxx</SecondaryIdentification> 
     </Sender> 
     <Receiver> 
     <SecondaryIdentification>xxxxxxxxxxx</SecondaryIdentification> 
     </Receiver> 
    </Security> 
    <TestMessage>1</TestMessage> 
    </Header> 
    <Body> 
    <RxHistoryRequest> 
     <RxReferenceNumber>POCDH1</RxReferenceNumber> 
     <Prescriber> 
     <Identification> 
      <NPI>xxxxxxx</NPI> 
      <DEANumber>xxxxxxxx</DEANumber> 
     </Identification> 
     <Name> 
      <LastName>JONES</LastName> 
      <FirstName>MARK</FirstName> 
     </Name> 
     <PhoneNumbers> 
      <Phone> 
      <Number>6152219800</Number> 
      <Qualifier>TE</Qualifier> 
      </Phone> 
     </PhoneNumbers> 
     </Prescriber> 
     <Patient> 
     <PatientRelationship>1</PatientRelationship> 
     <Name> 
      <LastName>PALTROW</LastName> 
      <FirstName>BRUCE</FirstName> 
      <MiddleName>K</MiddleName> 
     </Name> 
     <Gender>M</Gender> 
     <DateOfBirth>1954-12-25</DateOfBirth> 
     </Patient> 
     <BenefitsCoordination> 
     <PayerIdentification> 
      <PayerID>PBM123</PayerID> 
     </PayerIdentification> 
     <PayerName>INSURANCE COMPANY NAME</PayerName> 
     <CardholderID>MEMBERID</CardholderID> 
     <CardholderName>PALTROW, BRUCE</CardholderName> 
     <GroupID>B000000</GroupID> 
     <Consent>Y</Consent> 
     <PBMMemberID>B000000%111111110%001</PBMMemberID> 
     </BenefitsCoordination> 
    </RxHistoryRequest> 
    </Body> 
</Message> 

나는 내가 필요로 잘 돌고 내 방법

RxHistoryRequest RxHReq = new RxHistoryRequest(); 
     RxHReq.version = "008"; //ConfigurationManager.AppSettings["SSversion"]; 
     RxHReq.release = "001"; //ConfigurationManager.AppSettings["SSrelease"]; 
//declare values to the rest of the Properties 
//then 


MemoryStream memoryStream = new MemoryStream(); 
      XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
      XmlSerializer xs = new XmlSerializer(typeof(RxHistoryRequest)); 
      xs.Serialize(xmlTextWriter, RxHReq); 
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
      ns.Add("messaging","http://www.ncpdp.org/schema/SCRIPT"); 
      //ConfigurationManager.AppSettings["SurescriptsNamespace"] 


      memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 

      ASCIIEncoding encoding = new ASCIIEncoding(); 
      byte[] data = memoryStream.ToArray(); 

일부에서이

처럼 만들기 직렬화 클래스

[Serializable] 
    [XmlRoot("Message", Namespace = "http://www.domain.com/messaging")] 
    public class RxHistoryRequest 
    { 
     [XmlAttribute] 
     public string version = string.Empty; 
     [XmlAttribute] 
     public string release = string.Empty; 
     [XmlAttribute("schemaLocation", Namespace = XmlSchema.InstanceNamespace)] 
     public string xsiSchemaLocation = ConfigurationManager.AppSettings["Namespace"] + " " + 
              ConfigurationManager.AppSettings["SS_DirectorySchema"]; 
     public Header Header = new Header(); 
     public RxHistory Body = new RxHistory(); 
    } 
//rest of the Properties in the classes 

그리고 뭔가를 시도했다.

+0

그리고 얼마나 남았습니까? –

+0

.NET을 사용하여 XML 데이터를 생성하고 조작하는 데 필요한 다양한 내장 클래스가 있으며 설명서는 매우 광범위하고 직관적입니다. 정확히 어떤 부분에 문제가 있습니까? – mellamokb

+0

@JonSkeet 상태가 – HaBo

답변

0

잘 @ JonSkeet 제안 내 생각을 아주 쉽게 내 작업을 만들었 Linq-to-XML 로 바꿨다.

Linq-to-XML 작업에 관심이있는 사람이 있다면 여기가 내 코드입니다.

XNamespace ns = "http://www.ncpdp.org/schema/SCRIPT"; 
     XElement xml = new XElement(ns + "Message", 
      new XAttribute("release", "001"), 
      new XAttribute("version", "008"), 
      new XElement(ns + "Header", 
       new XElement(ns + "To", 
        new XAttribute("Qualifier", "ZZZ"), "xxxxxxxxxx"), 
       new XElement(ns + "From", 
        new XAttribute("Qualifier", "ZZZ"), "xxxxxxxxxxxx"), 
        new XElement(ns + "MessageID", CommonController.GetIntegerGUID().ToString()), 
        new XElement(ns + "SentTime", "2002-09-30T08:15:22"), 
        new XElement(ns + "Security", 
         new XElement(ns + "UsernameToken", 
          new XElement(ns + "Username", "")), 
          new XElement(ns + "Sender", 
           new XElement(ns + "SecondaryIdentification", "PASSWORD")), 
           new XElement(ns + "Receiver", 
            new XElement(ns + "SecondaryIdentification", "RXHUB")) 
         ), 
         new XElement(ns + "TestMessage", "1") 
         ), 
         new XElement(ns + "Body", 
          new XElement(ns + "RxHistoryRequest", 
           new XElement(ns + "RxReferenceNumber", "POCDH1"), 

// it goes on like that 

희망적입니다. 일부 사용자에게 유용 할 것입니다.