加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何针对dtd验证xml

发布时间:2020-12-15 21:14:32 所属栏目:百科 来源:网络整理
导读:我有一个 XML文档: ?xml version="1.0" encoding="utf-8"?!DOCTYPE ONIXMessage SYSTEM "http://www.editeur.org/onix/2.1/reference/onix-international.dtd"ONIXMessage Header FromCompanyCompanyy/FromCompany SentDate20101213/SentDate /Header Produ
我有一个 XML文档:

<?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来验证它.
怎么可能?我做正确的诽谤吗?

解决方法

从我能读到的内容我猜你的.dtd包含错误,而不是你的代码.您是否检查过.dtd包含< Language>的定义?这是孩子们的?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读