2011-02-25 4 views
1

최종 결과가 XML 문서를 만드는 클래스를 만들려고합니다. 현재이 클래스는 각각 XML 문서의 섹션을 만드는 중첩 클래스로 구성됩니다. 내가 잠시 멈추고있는 것은 최종 출력을 위해 내부 클래스의 결과를 묶어야하는 방법입니다.XML을 구현하는 내부 클래스 - 외부 클래스를 함께 묶는 방법?

외부 클래스가 XmlTextWriter의 인스턴스를 특정 섹션을 빌드하는 내부 클래스에 전달해야합니까, 아니면 각 내부 클래스가 XML의 문자열 표현을 출력하고 외부 클래스가 이들을 함께 조각 할 수 있습니까?

내가 증명하기 위해 함께 작은 예제를 넣어 가지고 ...

Public Class PatientInfoBuilder 

    'Instance of XmlTextWriter pass to each class' 
    Private writer as XmlTextWriter 

    'This class builds XML containing Patient first name, last name, etc ..' 
    Private Class PatientInfo 

    Private mWriter as XmlTextWriter 

    'Constructor accepts XmlTextWriter instance' 
    Public Sub New(ByRef writer as XmlTextWriter) 
     mWriter = writer 
    End Sub 

    Public Sub BuildXML() 
     mWriter.WriteStartElement('FirstName') 
     ... 
     ... 
     mWriter.WriteEndElement() 
    End Sub 

    End Class 

    'This class builds a list of patient medications' 
    Private Class PatientMedications 

    Private mWriter as XmlTextWriter 

    'Constructor accepts XmlTextWriter instance' 
    Public Sub New(ByRef writer as XmlTextWriter) 
     mWriter = writer 
    End Sub 


    Public Sub BuildXML() 
     mWriter.WriteStartElement('Medication') 
     ... 
     ... 
     mWriter.WriteEndElement() 
    End Sub 

    End Class 

End Class 

코드는 완전하지 않지만 나는 내가 달성하기 위해 노력하고 무엇 아이디어를 제공 바랍니다. XML 섹션을 모아 하나의 문서로 출력하는 방법을 찾아야합니다. 내 예제는 VB.NET에 있지만 C#의 대답도 환영합니다. 어떤 제안을 주셔서 감사합니다.

** 주석에 후행 아포스트로피가 있음을 알고 있습니다. 색상 코딩 된 마크 업이 올바르게 표시되도록이 작업을 수행했습니다.

+0

에서

은 참조하십시오? 여전히 .NET 1.1을 사용하고 있지 않다면 결코 XmlTextWriter를 사용해서는 안됩니다. 대신'XmlWriter' (와'XmlWriter.Create')를 사용하십시오. –

답변

1

나는 둘 다 보았다.

XMLTextWriter 인스턴스를 전달하거나 더 나은 내부 전용 구조를 전달하는 것이 좋습니다. XML 작성기를 만드는 것은 컴파일러를 작성하는 것과 비슷합니다. 여기에는 문서/텍스트 파일의 특정 지점에있는 모든 항목의 상태를 나타내는 변수가 있습니다. 예를 들어, 열었던 대괄호의 수, 현재 범위 등. 단순히 텍스트/문자열 결과를 다시 전달하려고하면 이러한 변수를 어딘가에 기록해야합니다.이 변수는 개체의 전역 변수 일 수 있습니다.

성능에 대한 고려 사항이 있습니다. 주위를 지나가는 객체를 사용하여 각각의 새 비트를 Array 또는 List에 추가 한 다음 끝에 String.Join을 사용하여 결합 할 수 있습니다. 그것은 텍스트의 일부를 전달하는 것보다 훨씬 빠르며, 각 섹션을 가져올 때 천천히 결합시키면서 프로세스의 어느 시점에서든 전체 결과를 저장할만큼 큰 메모리를 요구하고 끊임없이 릴리스해야합니다.

요약하면 첫 번째 아이디어가 더 좋습니다.

+0

대단히 고마워! – webworm

+0

'XmlTextWriter'는 직접적으로 사용되어서는 안됩니다. 어떤 것이 통과되어야한다면'XmlWriter'이어야합니다. –

2

이러한 이유로 Data Contracts을 사용하지 않는 이유가 무엇입니까?

이 클래스를 사용하면 직렬화해야하는 클래스/멤버에 속성을 추가 할 수 있습니다.

데이터 계약이 필요한 XML 출력에 대한 모든 제어를 지원하지 않을 경우 using XmlSerializer을 고려할 수도 있습니다.

+0

데이터 계약에 익숙하지 않은 것 같습니다. – webworm

+0

@webworm : 자습서를 빨리 ​​읽고 자습서를 통해 도움을받을 수 있는지 알아보십시오. 귀하의 목적에 부합한다면 장기적으로 시간을 절약 할 수 있습니다. –

1

강력하게 형식화 된 데이터 집합 생성. 그런 다음이 유형이 지정된 데이터 세트를 참조하는 코드에서 작업하십시오. 따라서 형식화 된 데이터 집합의 메서드를 사용하여 XML로 원하는 작업을 수행 할 수 있습니다. 당신이 사용하는 .NET 버전은 무엇 방법이 링크 Generating a Strongly Typed DataSet

관련 문제