2012-10-01 2 views
82

Delphi XE2에서 XML 데이터 바인딩 마법사를 사용하고 있습니다. 스키마는 이러한 유형의 태그를 요구했습니다Delphi XML 데이터 바인딩 마법사를 사용할 때 필수 태그가 없습니다.

<xs:element name="MyReport" type="MyReportType" /> 
<xs:complexType name="MyReportType"> 
    <xs:all> 
    <xs:element name="Header" type="HeaderType" /> 
    <xs:element name="Values" type="ValuesType" /> 
    <xs:element name="Events" type="EventsType" /> 
    </xs:all> 
</xs:complexType> 

문제는 그 나는 예를 들어, 어떤 요소를 추가하지 않는 경우 값 그룹에는 <Values> 태그가없고 XML 파일은 XSD에 대한 유효성 검사에 실패합니다. 이것은 아마도 인터페이스가 Values ​​태그를 "추가"하는 방법을 제공하고 있다면 문제가되지 않을 것입니다.

표준 처리 방법이 있습니까? 아니면 생성 된 코드를 올바르게 사용하고 있습니까? 단순히 넣어

, 어떤 방법은 경우가 위의 스키마를 사용하여 유효성을 검사하기 위해 필요한 것이다 (다음 XML을 생성, 마법사 데이터 바인딩의 코드를 사용하여 해결 방법이나 그렇지 않으면,이 HeaderType 주어진 자식 노드), 없다, ValuesType 및 EventsType이 복합 타입의 데이터입니다

<MyReport> 
    <Header /> 
    <Values /> 
    <Events /> 
</MyReport> 

코드가 <xs:sequence> 최종 XML 파일에서 올바른 순서를 시행하지 않음으로써 발생하는 것처럼 (나는 다른 유사한 문제가 알고, 하지만 적어도 그 하나는 올바른 순서로 아이들을 삽입하기 만하면 해결할 수 있습니다. .

+0

주문하신 언급의 문제점을 이미 발견했습니다. 생성 된 클래스는 XML 객체 모델을 둘러싼 벙어리 래퍼입니다. 요청할 때만 존재할 것입니다. 문자열 유형을 사용하면 충분히 쉽습니다 (빈 문자열 추가). 복잡한 유형의 경우 nil이 작동하는지 확실하지 않습니다. –

+0

이것은 실제로 사실이 아닙니다. 'TXMLValuesType.AfterConstruction'에 대한 코드는 을 읽습니다.'RegisterChildNode ('Value', TXMLValueType); IXMLValueTypeList로 FValue : = CreateCollection (TXMLValueTypeList, IXMLValueType, 'Value'), 값 태그 (값 태그 아래에있는)의 컬렉션이 있으므로 빈 값 태그를 만드는 것이 어렵습니다 . 빈 값 목록은'SaveToFile'가''-tag – Randomeister

+1

@Randomeister를 생성하도록 강요하지 않게됩니다. - XSD에서 minOccurs = "1"속성을 시도하십시오 : \t . 또한 대신 을 사용해보세요. 나는 바인딩 마법사 (Delphi XE)를 잘 다루었지만 문제가 발생하지는 않았다. 그러나 마법사가 순서와 필수 값을 이해할 수 있도록 유형과 속성을 올바르게 선언했는지 확인해야한다. – Vector

답변

1

확실하지 이해) 엠바 카데로 계정에 이러한 기능의 이상 소요 완벽한 인터페이스를 제공 할 수 있다면 좋을 것이라고 생각하지만 어쩌면 당신이 찾고있는 것은 : 사용

<xs:element name="MyReport" type="MyReportType" /> 
<xs:complexType name="MyReportType"> 
    <xs:all> 
    <xs:element name="Header" type="HeaderType" use="optional" /> 
    <xs:element name="Values" type="ValuesType" use="optional" /> 
    <xs:element name="Events" type="EventsType" use="optional" /> 
    </xs:all> 
</xs:complexType> 
= "선택"

괜찮은지 말해주세요.

+0

up. 그것은 당신이 찾고 있던 것입니까? – Hans

관련 문제