나는 XML Data Binding Wizard
in을 사용하고 있습니다 Delphi XE2
. 스키마에는 다음 유형의 필수 태그가 있습니다.
<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
-group에 요소를 추가하지 않으면 <Values>
-tag 가 없으며 XML 파일이 XSD
. 인터페이스가 Values
-tag 를 "추가"하는 방법을 제공하는 경우 이는 문제가되지 않을 것입니다 .
이것을 처리하는 표준 방법이 있습니까, 아니면 생성 된 코드를 잘못 사용하고 있습니까?
간단히 말하면 이, 어떤 로부터의 코드를 사용하여, 해결 방법 또는 기타, 방법은 Data Binding Wizard
다음을 생산하기 위해, XML
주어진 (자식 노드가없는 경우 위의 스키마를 사용하여 검증하기 위해 필요한 것입니다) HeaderType
, ValuesType
그리고 EventsType
복합 타입의 데이터입니다 :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
( <xs:sequence>
최종 파일에 올바른 순서를 적용하지 않아 생성 된 코드와 같은 다른 유사한 문제가 있다는 것을 알고 XML
있지만 적어도 해당 문제에 대해서는 단순히 올바른 순서로 자식을 삽입하는 방법이 있습니다. 여전히 생각합니다. Embarcadero
이러한 기능을 더 많이 고려하는 완전한 인터페이스를 제공 한다면 좋을 것입니다.)
주문을 언급했을 때 이미 문제의 원인을 발견했습니다. 생성 된 클래스는 XML 객체 모델을 둘러싼 멍청한 래퍼입니다. 요청 될 때만 존재합니다. 문자열 유형의 경우 이것은 충분히 쉽지만 (빈 문자열을 추가하기 만하면 됨) 복잡한 유형의 경우 nil이 작동하는지 확실하지 않습니다.
—
Leonardo Herrera
이것은 사실이 아닙니다.
—
Randomeister
TXMLValuesType.AfterConstruction
읽기 용 코드 RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
는 Value-items 컬렉션 (부모 Values-tag 아래)이 존재하므로 빈 Values-tag를 생성하기가 매우 어렵습니다. 비어있는 Value-list는 -tag 를 강제 SaveToFile
로 생성하는 것을 효과적으로 막을 것입니다<Values />
@Randomeister-XSD에서 minOccurs = "1"속성을 사용해보십시오 : <xs : all maxOccurs = "1">. 또한 <xs : all> 대신 <xs : sequence>를 사용해보십시오. 저는 바인딩 마법사 (Delphi XE에서)를 잘 다루었 고 문제가 발생하지 않았습니다.하지만 마법사가 순서와 필수 값을 이해할 수 있도록 유형과 속성을 올바르게 선언했는지 확인해야합니다.
—
Vector