2011-01-24 7 views
4

에 대한 XML의 유효성을 검사하는 방법 :나는 XML 문서가 DTD

<?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> 

유효성 검사 코드는 다음과 같습니다

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(); 

내가 가지고 유효성 검사 오류 :

The element 'Product' has invalid child element 'Language'. List of possible elements expected: 'Contributor NumberWithinSeries YearOfAnnual ISBNOfSet EAN13OfSet ProductIdentifier TitleOfSet Title Set TextCaseFlag DistinctiveTitle TitlePrefix Title'.

하지만 보낼 때이 XML을 파트너에게 보내면 그 문서에는 유효성 검사 오류가 없다고 말합니다. 그들은 org.dom4j.io.SAXReader를 사용하여 유효성을 검사합니다. 어떻게 가능합니까? 나는 화폐 공급을 제대로하고 있나?

답변

1

내가 읽을 수있는 것에서 .dtd에 오류가 있으며 코드가 포함되어 있지 않다고 생각됩니다. .dtd에 <Language>에 대한 정의가 있고 그 자식이 있는지 확인 했습니까?

+0

내 DTD가 아닙니다. ONIX 메시지의 공식 DTD입니다. http://www.editeur.org/8/ONIX/ – Lari13