在本文中,我们将带你了解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检测文件是否存在)
- 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检测文件是否存在)
我有一个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格式
转自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
实例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文件验证失败
我必须生成格式为“ =“ 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序列化,我该怎么做?
所以我想验证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
<?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<br> 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<br> Nat «King» COLE. Blues<br> 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来验证它.
怎么可能?我做正确的诽谤吗?
解决方法
我们今天的关于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的相关信息,可以在本站进行搜索。
本文标签: