GVKun编程网logo

PHP – 根据在线DTD文件验证XML(php检测文件是否存在)

15

在本文中,我们将带你了解PHP–根据在线DTD文件验证XML在这篇文章中,我们将为您详细介绍PHP–根据在线DTD文件验证XML的方方面面,并解答php检测文件是否存在常见的疑惑,同时我们还将给您一些

在本文中,我们将带你了解PHP – 根据在线DTD文件验证XML在这篇文章中,我们将为您详细介绍PHP – 根据在线DTD文件验证XML的方方面面,并解答php检测文件是否存在常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式、bcp queryout xml格式文件编码utf-8 xml文件验证失败、c# – 如何通过.NET验证xml代码文件?如果我使用XML序列化,我该怎么做?、c# – 如何针对dtd验证xml

本文目录一览:

PHP – 根据在线DTD文件验证XML(php检测文件是否存在)

PHP – 根据在线DTD文件验证XML(php检测文件是否存在)

我有一个xml文件,我想用DTD验证它.

为此,我在XML中包含了DTD链接:

<!DOCTYPE article SYstem "http://dtd.nlm.nih.gov/1.1/journalpublishing.dtd">

然后做了:

$dom = new DOMDocument();
$dom->loadHTML($xml);

if ($dom->validate()) {
    echo "This document is valid!\n";exit;
}
else {
    var_dump("Not OK");exit;
}

问题是我收到此警告消息:

Warning: DOMDocument::validate(http://www.w3.org/TR/REC-html40/loose.dtd): Failed to open stream: HTTP request Failed! HTTP/1.0 500 Server Error

任何的想法?谢谢.

解决方法:

您使用错误的方法加载XML.

使用load加载XML文件或使用loadXML加载XML字符串.使用loadHTMLFile加载HTML文件,使用loadHTML加载HTML内容.

使用其中一种HTML方法将触发libxml’s HTML parser module,即

an HTML 4.0 non-verifying parser with API compatible with the XML parser ones. It should be able to parse “real world” HTML, even if severely broken from a specification point of view.

HTML Parser模块将始终使用HTML4 Transitional作为DTD,以及使用宽松错误处理解析文档并尝试自动更正内容,例如,通过向部分内容添加HTML骨架等.

28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html

XML Schema 语言也称作 XML Schema 定义(XML Schema DeFinition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大。
作用有:
①定义可出现在文档中的元素
②定义可出现在文档中的属性
③定义哪个元素是子元素
④定义子元素的次序
⑤定义子元素的数目
⑥定义元素是否为空,或者是否可包含文本
⑦定义元素和属性的数据类型
⑧定义元素和属性的默认值以及固定值


XSD元素可分为简单元素和复杂元素。

一、简单元素
简易元素指仅包含文本的元素,它不会包含任何其他的元素或属性。
例如XML文档:
<Name>张三</Name>
用XSD可写为
<xs:element name="Name" type="xs:string"/>
此处“Name”是元素的名称,“xs:string”是XML Schema内建的数据类型。
最常用的类型有:xs:string、xs:decimal、xs:integer、xs:boolean、xs:date、xs:time等。

如果要指定元素的默认值或固定值,默认值用default定义,固定值用fixed定义。
<xs:element name="Name" type="xs:string" default="张三"/>
<xs:element name="Name" type="xs:string" fixed="张三"/>

也可限定元素的取值范围,例如限定字符串的长度为2至4,则可写为如下:
<xs:element name="Name">
     <xs:simpleType>
          <xs:restriction base="xs:string">
                <xs:minLength value="2" />
                 <xs:maxLength value="4" />
           </xs:restriction>
     </xs:simpleType>
</xs:element>

也可以写成:
<xs:element name="Name" type="tns:T_Name" />

<xs:simpleType name="T_Name">
    <xs:restriction base="xs:string">
      <xs:minLength value="2" />
      <xs:maxLength value="4" />
    </xs:restriction>
</xs:simpleType>

二、复合元素
复合元素包含了其他的元素及/或属性。
有四种类型的复合元素:
①空元素
②包含其他元素的元素
③仅包含文本的元素
④包含元素和文本的元素

一个XML代码:
 <Person id="1">
     <Name>张三</Name>  
     <Age>120</Age>  
  </Person>  

在 XML Schema 中,可定义为:
<xs:element name="Person" maxOccurs="unbounded">
     <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" />
              <xs:element name="Age" type="xs:string" />               
            </xs:sequence>
            <xs:attribute name="id" type="xs:int" use="required" /> 
    </xs:complexType>
</xs:element>

一些用法说明:
1、maxOccurs="unbounded"
maxOccurs为Occurrence 指示器,Occurrence 指示器用于定义某个元素出现的频率,有2种类型分别是 maxOccurs和minOccurs ,默认值均为 1。
① maxOccurs 指示器:规定某个元素可出现的最大次数
如<xs:element name="Name" type="xs:string" maxOccurs="10"/>
规定元素“Name”最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。
② minOccurs 指示器:规定某个元素能够出现的最小次数
如<xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="10"/>
规定元素“Name”最少出现0次,最多出现 10 次。

提示:如需使某个元素的出现次数不受限制,使用 maxOccurs="unbounded" 这个声明
上面<xs:element name="Person" maxOccurs="unbounded">表示元素“Person”出现次数最少一次(其中 minOccurs 的默认值是 1),并且任意次数。

2、<xs:sequence>
<xs:sequence>为“Order 指示器”,Order 指示器用于定义元素的顺序,有3种类型分别是All、Choice、Sequence。
① all 指示器:规定子元素可以按照任意顺序出现
② Choice 指示器:规定可出现某个子元素或者可出现另外一个子元素(非此即彼)
③ Sequence 指示器:规定子元素必须按照特定的顺序出现

上面例子代码用<xs:sequence>规定了子元素“Name”和“Age”必须按顺序出现。

3、use="required"
use 指示如何使用属性,有3种:
① optional :属性是可选的并且可以具有任何值。这是默认设置。 
<xs:attribute name="id" type="xs:int"/>等价于
<xs:attribute name="id" type="xs:int" use="optional"/>
可验证通过<Person>或<Person id="1">
② required :属性必须出现一次。
<xs:attribute name="id" type="xs:int" use="required"/>
可验证通过<Person id="1">
③ prohibited :不能使用属性。
<xs:attribute name="id" use="prohibited"/>
规定了不能使用id的属性。


实例1(无命名空间):

Persons.xml

<? xml  version="1.0" encoding="UTF-8"?> 
< Persons >
   < Person  id="1">
      < Name >张三</ Name
      < Age >120</ Age
   </ Person
   < Person  id="2"> 
      < Name >李四</ Name
      < Age >20</ Age
   </ Person >
</ Persons >

 Persons.xsd

+ View Code

 

实例2(有命名空间):

Persons2.xml

<? xml  version="1.0" encoding="UTF-8"?> 
< Persons  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.xxx.com/XxxSystem">
   < Person  id="1">
      < Name >张三</ Name
      < Age >120</ Age
   </ Person
   < Person  id="2"> 
      < Name >李四</ Name
      < Age >20</ Age
   </ Person >
</ Persons >

 Persons2.xsd

<? xml  version="1.0" encoding="UTF-8"?>
< xs:schema  elementFormDefault="qualified"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:tns="http://www.xxx.com/XxxSystem" >
 
   < xs:annotation >
     < xs:documentation > 本文档定义Persons.xml的格式 </ xs:documentation >
   </ xs:annotation >
 
   < xs:annotation >
     < xs:documentation >姓名</ xs:documentation >
   </ xs:annotation >
   < xs:simpleType  name="T_Name">
     < xs:restriction  base="xs:string">
       < xs:minLength  value="2" />
       < xs:maxLength  value="4" />
     </ xs:restriction >
   </ xs:simpleType >
   < xs:annotation >
     < xs:documentation >年龄</ xs:documentation >
   </ xs:annotation >
   < xs:simpleType  name="T_Age">
     < xs:restriction  base="xs:string">
       < xs:pattern  value="[1-9][0-9]?|1[01][0-9]|120" />
     </ xs:restriction >
   </ xs:simpleType >
   < xs:annotation >
     < xs:documentation >属性ID</ xs:documentation >
   </ xs:annotation >
   < xs:simpleType  name="T_id">
     < xs:restriction  base="xs:int"></ xs:restriction >
   </ xs:simpleType >
 
   < xs:element  name="Persons">
     < xs:complexType >
       < xs:sequence >
         < xs:element  name="Person" maxOccurs="unbounded" type="tns:T_Person"/>
       </ xs:sequence >
     </ xs:complexType >
   </ xs:element >
 
   < xs:complexType  name="T_Person">
     < xs:sequence >
       < xs:element  name="Name" type="tns:T_Name" />
       < xs:element  name="Age" type="tns:T_Age" />
     </ xs:sequence >
     < xs:attribute  name="id" type="tns:T_id" use="required" />
   </ xs:complexType >
 
</ xs:schema >

 C# 使用xsd文件验证XML格式

/// <summary>
         /// 通过xsd验证xml格式是否正确,正确返回空字符串,错误返回提示
         /// </summary>
         /// <param name="xmlFile">xml文件</param>
         /// <param name="xsdFile">xsd文件</param>
         /// <param name="namespaceUrl">命名空间,无则默认为null</param>
         /// <returns></returns>
         public  static  string  XmlValidationByXsd( string  xmlFile, string  xsdFile, string  namespaceUrl = null )
         {
             StringBuilder sb = new  StringBuilder();         
             XmlReaderSettings settings = new  XmlReaderSettings();
             settings.ValidationType = ValidationType.Schema;
             settings.Schemas.Add(namespaceUrl,xsdFile);
             settings.ValidationEventHandler += (x,y)=>
             {
                 sb.AppendFormat( "{0}|" ,y.Message);
             };
             using  (XmlReader reader = XmlReader.Create(xmlFile,settings))
             {
                 try
                 {
                     while  (reader.Read());                 
                 }
                 catch  (XmlException ex)
                 {
                     sb.AppendFormat( "{0}|" ,ex.Message);
                 }
             }
             return  sb.ToString();
         }

bcp queryout xml格式文件编码utf-8 xml文件验证失败

bcp queryout xml格式文件编码utf-8 xml文件验证失败

我必须生成格式为“ =“ UTF-8”的xml文件。我使用了bcp
queryout。正在生成xml文件。但是我的问题是xml文件验证失败。有人可以帮助我解决这个问题吗?这是我的代码。

 DECLARE @xmlBody AS VARCHAR(MAX)= '<?xml version="1.0" encoding="UTF-8"?>'+ CAST(@xmlStr  AS VARCHAR(MAX))


       INSERT INTO  [dbo].[MasterXml]   
           ([PurchaseOrderID],[Code])          
        values (@PurchaseOrderID,@xmlBody)                         
        Declare @command varchar(8000)

        SET @command= 'bcp "SELECT TOP 1 [Code] from  [tec_Dev].[dbo].[MasterXml] where PurchaseOrderID='+          
        CAST( @PurchaseOrderID As varchar(20))+'" queryout '            
         +@uploadFolder + CAST(@PurchaseOrderID AS varchar(20))+'.xml' +' -T -N -w -c -C65001'

    print @command

EXEC xp_cmdshell @command

c# – 如何通过.NET验证xml代码文件?如果我使用XML序列化,我该怎么做?

c# – 如何通过.NET验证xml代码文件?如果我使用XML序列化,我该怎么做?

我希望用户能够将数据导出为 XML文件.当然,我希望他们以后能够导入相同的XML文件,但是他们总是可以更改它,或者它可能是不同的XML文件.

所以我想验证XML文件以检查它是否采用我期望的格式.所以我想我需要像模式一样来检查它必须通过代码.

所以,如果我期待

<Root>
 <Something>
    <SomethingElse> </SomethingElse>
 </Something>
</Root>

我不希望其他格式在文件中,而不是我期望的格式.

另外我如何验证字段?就像说我要求标签之间必须有一些文字.如果为空,则文件无效.

那怎么能这样呢?

编辑

我决定使用XML序列化,所以我知道如果格式错误并且忽略不起作用的东西,它将通过异常.但是,我不确定是否应该通过它和C#来验证每个记录,或者我应该尝试使用xml架构来完成它.

如果我想通过xml序列化的xml架构来实现它将如何工作?就像我首先做的事情,就像我在回复中看到的那样,然后将其序列化?或者我该怎么做?

解决方法

这是一个可用于执行此操作的代码段:

using (FileStream stream = File.OpenRead(xsdFilepath))
{
    XmlReaderSettings settings = new XmlReaderSettings();

    XmlSchema schema = XmlSchema.Read(stream,OnXsdSyntaxError);
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(schema);
    settings.ValidationEventHandler += OnXmlSyntaxError;

    using (XmlReader validator = XmlReader.Create(xmlPath,settings))
    {
        // Validate the entire xml file
        while (validator.Read()) ;
    }
}

发生语法错误时将调用OnXmlSyntaxError函数.

c# – 如何针对dtd验证xml

c# – 如何针对dtd验证xml

我有一个 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>的定义?这是孩子们的?

我们今天的关于PHP – 根据在线DTD文件验证XMLphp检测文件是否存在的分享就到这里,谢谢您的阅读,如果想了解更多关于28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式、bcp queryout xml格式文件编码utf-8 xml文件验证失败、c# – 如何通过.NET验证xml代码文件?如果我使用XML序列化,我该怎么做?、c# – 如何针对dtd验证xml的相关信息,可以在本站进行搜索。

本文标签: