我有运行时读入的xml文件,是否可以在运行时针对xsd文件验证xml?使用c#
嗨,我有一些不会验证的XML.我把这个问题缩小到了这个范围:
<script type="text/javascript">document.getelementbyid("oxm-1f4a4485-5a1d-45f9-a989-9c65a0b9ceb6").src="http://bid.website.net/display?l=h4siaaaaaaaaad2nmq6cqbrenycw7qjyolfccxmregvcoae0u0sly_agtvaewwn4bg_havwbnebpvmzkkzra_kzzdvoloq4u-hjnp7sii0rxcbzz5vl5kxsrds6wtsfbxmcr9chysuhqbecuckb8cvx4m-pbcxugtdrll6d3dqtihnqukth2yvdkptr67cuzfvlxjlinkul9634lpal_h4mwhso8aabzhw1cdcwjxl6xivgv8agrjxjc_gaaaa==&p=h4siaaaaaaaaabxkmq7cmaxaurcqjjrrsfqqsrm7x3fsrwyvosda8qnj_3ojfgb49o45pblq7e80syzjhopggso9wyzpcpntzkxk1ldtbbi7otmxfj9da1wpjcf10vtxdj9e5_utyj19k2lfssepld5agnqaaaa=&url=http%3a%2f%2flocalhost%2fproject-debug%2fproject.html";</script>
Run Code Online (Sandbox Code Playgroud)
我把它放在一个XML验证器中,它吐出来:
此页面包含以下错误:第16行第1行的错误:EntityRef:expecting';'
任何关于失踪';'的想法 应该去?还有其他问题吗?
我正在为我的XML验证最终编写一个模式,并最终得到了所有(几乎)工作.但现在我在XML中遇到了最奇怪的错误.我将首先展示我的架构,因为问题应该在哪里,但它没有给我任何错误.
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:os="OrdersSchema"
targetNamespace="OrdersSchema"
elementFormDefault="unqualified"
attributeFormDefault="qualified">
<element name="orders" type="os:orders"/>
<complexType name="orders">
<sequence>
<element name="order" type="os:order" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="order">
<sequence>
<element name="deliveryAddress">
<complexType>
<sequence>
<element name='line1' type='os:lineType'/>
<element name='line2' type='os:lineType'/>
<element name='line3' type='os:lineType'/>
<element name='line4' type='os:lineType' minOccurs='0'/>
</sequence>
<attribute name="orderId" type="string" use="required" >
</attribute>
<attribute name="type" type="os:typeType" use="required"/>
</complexType>
<unique name="uniqueOrderIdPerOrder">
<selector xpath="os:order"/>
<field xpath="orderId"/>
</unique>
</element>
<element name='items'>
<complexType>
<attribute name='productId' type='os:productIdType'/>
<attribute name='quantity'>
<simpleType>
<restriction base='positiveInteger'>
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
<element name='note' minOccurs='0' …Run Code Online (Sandbox Code Playgroud) 我想测试(true或false)任意XML文件是否与给定模式匹配.
对于它的价值,架构是Word 2003 WordML架构,Microsoft使用大约7个*.xsd文件的列表定义.
其中一个文件还包括W3C xml.xsd文件,包括以下语句:
<xsd:import id="xml" namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"></xsd:import>
Run Code Online (Sandbox Code Playgroud)
我使用如下的.NET代码进行验证:
public static void validate(string filename)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(
"http://schemas.microsoft.com/office/word/2003/wordml",
//to get this file I downloaded "Office 2003: XML Reference Schemas", i.e. "Office2003XMLSchema.exe"
@"C:\Program Files\Microsoft Office 2003 Developer Resources\Microsoft Office 2003 XML Reference Schemas\WordprocessingML Schemas\wordnet.xsd"
);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(validationEventHandler);
XmlReader xmlReader = XmlReader.Create(filename, settings);
while (xmlReader.Read()) { }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我在未连接到互联网的机器上运行此代码,那么我会收到一个XmlSchemaValidationException无法找到的错误xml.xsd.
为了解决这个问题,我下载了一份xml.xsd,并使用该settings.Schemas.Add方法显式添加:当机器未连接到互联网时,验证现在可以正常工作.
但是,当机器连接到互联网时,我现在得到一个错误说The …
是否可以在Java中验证JSON和XSD?我有一个应用程序,我收到JSON响应,我想对现有的XSD进行验证.我的应用程序的另一部分使用XML,这就是为什么如果它们都可以对现有的XSD进行验证最简单的原因.
我有一个使用jaxb创建的xml文件.我需要针对xsd文档验证它.是否可以在没有解组的情况下进行验证.然后我需要在xml文件中打印错误.
在XSD文件中定义特定数据类型的元素时是否存在隐含的默认值范围?例如,如果我定义一个integer类型的元素:
<xs:element name="MyIntegerElement" type="xs:integer"/>
Run Code Online (Sandbox Code Playgroud)
这是否具有它将验证的隐含最小值和最大值?我知道我可以明确定义有效范围,如下所示:
<xs:element name="MyIntegerElement">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="16"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
但是如果我在针对此验证XML文件时不这样做,它会默认为一系列有效值吗?我一直在挖掘XSD文档但尚未找到答案.
我已经为我的网站提出了基于xml的api请求.
但有时候,有些客户发给我一个无效的xml,我想回复一个好的回复.
我该如何验证xml?
编辑:
好吧,我想我提出了错误的问题,我想验证节点,如果某些节点丢失,那么我会返回最佳响应.
我曾经用php验证这一点,我必须检查每个节点.但这种方式很难修改.
这是我的xml示例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mashhadhost>
<create>
<name>example.ir</name>
<period>60</period>
<ns>
<hostAttr>
<hostName>ns1.example.ir</hostName>
<hostAddr ip="v4">192.0.2.2</hostAddr>
</hostAttr>
</ns>
<contact type="holder">ex61-irnic</contact>
<contact type="admin">ex61-irnic</contact>
<contact type="tech">ex61-irnic</contact>
<contact type="bill">ex61-irnic</contact>
</create>
<auth>
<code>TOKEN</code>
</auth>
</mashhadhost>
Run Code Online (Sandbox Code Playgroud) 我用我在本地的DTD文件来验证我的XML.
为此,我正在做:
$xml = $dmsMerrin.'/xml/'.$id.'/conversion.xml';
$dtd = $dmsMerrin.'/style_files/journalpublishing.dtd';
$dom = new DOMDocument();
@$dom->load($xml);
libxml_use_internal_errors(true);
if (@$dom->validate()) {
$htmlDTDError .= "<h2>No Errors Found - The tested file is Valid !</h2>";
}
else {
$errors = libxml_get_errors();
$htmlDTDError .= '<h2>Errors Found ('.count($errors).')</h2><ol>';
foreach ($errors as $error) {
$htmlDTDError .= '<li>'.$error->message.' on line '.$error->line. '</li>';
}
$htmlDTDError .= '</ol>';
libxml_clear_errors();
}
libxml_use_internal_errors(false);
Run Code Online (Sandbox Code Playgroud)
对于1600行的XML,这需要大约30秒.
这是平时吗?我认为应该快得多吗?
如您所见,我使用的DTD是本地服务器上的.
任何的想法?谢谢.
编辑:通过调试和检查执行时间,我注意到如果我的xml有1600行或150行,它需要相同的时间,所以问题不是xml大小.
我正在.NET中构建一个Web服务,它将通过XML来回传递数据.我想使用我定义的XSD验证传入请求中的XML.
这是XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="POSearch">
<xs:sequence minOccurs="0" maxOccurs="10">
<xs:element name="POID" type="xs:positiveInteger"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
这是XML:
<POSearch>
<POID>1</POID>
<POID>2</POID>
</POSearch>
Run Code Online (Sandbox Code Playgroud)
这是C#中的验证代码:
static void Main(string[] args){
XmlSchemaSet iSchemas = new XmlSchemaSet();
iSchemas.Add(string.Empty, @"...xsd file location");
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
settings.Schemas.Add(iSchemas);
XmlReader reader = XmlReader.Create(@"...xml file location", settings);
try {
while(reader.Read())
;
}
catch(Exception ex) {
Console.WriteLine(ex.Message);
}
}
private static void …Run Code Online (Sandbox Code Playgroud) xml-validation ×10
xml ×9
xsd ×5
c# ×2
php ×2
.net ×1
dtd ×1
java ×1
jaxb ×1
jaxb2 ×1
json ×1
namespaces ×1
schema ×1
validation ×1