How to check xml on dtd

I have an XML document:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ONIXMessage SYSTEM "http://www.editeur.org/onix/2.1/reference/onix-international.dtd"> <ONIXMessage> <Header> <FromCompany>Companyy</FromCompany> <SentDate>20101213</SentDate> </Header> <Product> <RecordReference>153640</RecordReference> <NotificationType>03</NotificationType> <ProductIdentifier> <ProductIDType>03</ProductIDType> <IDValue>9785714009341</IDValue> </ProductIdentifier> <ProductForm>AC</ProductForm> <NumberOfPieces>1</NumberOfPieces> <ProductClassification> <ProductClassificationType>02</ProductClassificationType> <ProductClassificationCode>55101514</ProductClassificationCode> </ProductClassification> <Title> <TitleType>01</TitleType> <TitleText>Jazz Piano. Volume 3.</TitleText> </Title> <Contributor> <SequenceNumber>1</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Waller Fats</PersonName> <PersonNameInverted>Fats, Waller</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Waller</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Fats</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>2</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Peterson Oscar</PersonName> <PersonNameInverted>Oscar, Peterson</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Peterson</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Oscar</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>3</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Kenton Stan</PersonName> <PersonNameInverted>Stan, Kenton</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Kenton</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Stan</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>4</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Evans Bill</PersonName> <PersonNameInverted>Bill, Evans</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Evans</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Bill</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>5</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Shearing George</PersonName> <PersonNameInverted>George, Shearing</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Shearing</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>George</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>6</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>D. Ellington</PersonName> <PersonNameInverted>Ellington, D.</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>D.</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Ellington</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Contributor> <SequenceNumber>7</SequenceNumber> <ContributorRole>A01</ContributorRole> <PersonName>Corea Chic</PersonName> <PersonNameInverted>Chic, Corea</PersonNameInverted> <TitlesBeforeNames> </TitlesBeforeNames> <NamesBeforeKey>Corea</NamesBeforeKey> <PrefixToKey> </PrefixToKey> <KeyNames>Chic</KeyNames> <SuffixToKey> </SuffixToKey> </Contributor> <Language> <LanguageRole>01</LanguageRole> <LanguageCode>rus</LanguageCode> </Language> <NumberOfPages>0</NumberOfPages> <MainSubject> <MainSubjectSchemeIdentifier>20</MainSubjectSchemeIdentifier> <SubjectHeadingText>Nuotit, Jazz pianolle</SubjectHeadingText> </MainSubject> <OtherText> <TextTypeCode>01</TextTypeCode> <Text>Contents&lt;br&gt; Thomas «Fats» WALLER. Keepin' out of Mischief Now Oscar PETERSON. Whisper Not Stan KENTON. Painted Rhythm Oscar PETERSON. The Nearness of You Stan KENTON. Southern Scandal&lt;br&gt; Nat «King» COLE. Blues&lt;br&gt; Bill EVANS. Interplay (Blues F minor) Bill EVANS. Very Early George SHEARING. Changing with the Times Duke ELLINGTON. Echoes of Harlem Chick COREA. Gemini</Text> </OtherText> <MediaFile> <MediaFileTypeCode>04</MediaFileTypeCode> <MediaFileFormatCode>03</MediaFileFormatCode> <MediaFileLinkTypeCode>01</MediaFileLinkTypeCode> <MediaFileLink>9785714009341.jpg</MediaFileLink> <MediaFileDate>20101220</MediaFileDate> </MediaFile> <ProductWebsite> <ProductWebsiteLink>http://www.site.com/344.html</ProductWebsiteLink> </ProductWebsite> <Publisher> <PublisherName>Muzyka</PublisherName> </Publisher> <CountryOfPublication>RU</CountryOfPublication> <PublishingStatus>04</PublishingStatus> <PublicationDate>2010</PublicationDate> <SupplyDetail> <SupplierName>Company</SupplierName> <ProductAvailability>21</ProductAvailability> <Price> <PriceTypeCode>02</PriceTypeCode> <PriceAmount>9.0000</PriceAmount> <CurrencyCode>EUR</CurrencyCode> <TaxRateCode1>S</TaxRateCode1> <TaxRatePercent1>9</TaxRatePercent1> </Price> </SupplyDetail> </Product> </ONIXMessage> 

Confirmation code:

  xml = "this XML document above"; var r = new XmlTextReader(new StringReader(xml)); var settings = new XmlReaderSettings(); var sb = new StringBuilder(); settings.ProhibitDtd = false; settings.ValidationType = ValidationType.DTD; settings.ValidationEventHandler += (a, e) => { sb.AppendLine(e.Message); ret = false; }; XmlReader validator = XmlReader.Create(r, settings); while (validator.Read()) { } validator.Close(); 

I got a validation error:

The Product element is not a valid Language child element. List of Expected Items: WithinSeries Participant Number YearOfAnnual ISBNOfSet EAN13OfSet ProductIdentifier TitleOfSet Set Name TextCaseFlag DistinctiveTitle TitlePrefix Title '.

But when I send this XML to my partner, he says that the document does not contain validation errors. They use org.dom4j.io.SAXReader to validate it. How is this possible? Am I doing the validation right?

+4
source share
1 answer

Well, from what I can read, I would suggest that your .dtd contains errors, not your code. Have you verified that .dtd contains a definition for <Language> and its children?

+1
source

Source: https://habr.com/ru/post/1336753/


All Articles