我正在尝试使用以下代码从给定的XSD文件验证我的XML文件,
Source xmlFile = new StreamSource(fXmlFile);
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File("presentation.xsd"));
Validator validator = schema.newValidator();
try {
validator.validate(xmlFile);
System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
System.out.println(xmlFile.getSystemId() + " is NOT valid");
System.out.println("Reason: " + e.getLocalizedMessage());
}
Run Code Online (Sandbox Code Playgroud)
我上传了我的XSD文件到这里给你看:http://orhancanceylan.com/stack/presentation.xsd
但是当我运行我的代码时,我收到此错误:
org.xml.sax.SAXParseException: s4s-att-not-allowed: Attribute 'maxOccurs' cannot appear in element 'element'.
Run Code Online (Sandbox Code Playgroud)
有什么问题,我该如何解决?
我正在遵循lxml验证文档来构建一个类,该类根据Math ML 3.0模式验证给定的XML字符串.这是班级:
class XMLSchema(object):
def __init__(self, path_to_xsd_file):
with open(path_to_xsd_file) as f:
xmlschema_doc = etree.parse(f)
self.xmlschema = etree.XMLSchema(xmlschema_doc)
def validate(self, well_formed_xml_string):
"""Validates a well-formed XML string against an XML schema.
Returns True if xml_string is valid, False if not.
"""
xml = etree.parse(StringIO(well_formed_xml_string))
return self.xmlschema.validate(xml)
Run Code Online (Sandbox Code Playgroud)
实例化它会产生以下结果:
>>> x = XMLSchema('mathml3.xsd')
Traceback (most recent call last):
...
lxml.etree.XMLSchemaParseError: complex type
'annotation-xml.model': The content model is not determinist., line 42
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在构建我的svcutil命令行以从OSEO模式生成业务对象.
每当它告诉我"xxx"类型丢失时,我确定我需要包含在命令行中的xsd并添加它.到目前为止,我的命令行如下所示:
svcutil /language:C# /namespace:*,OGC.OSEO.DataContract /out:IOSEO.cs oseo/1.0/oseo.wsdl oseo/1.0/oseo.xsd ows/2.0/owsAll.xsd ows/2.0/ows19115subset.xsd ows/2.0/owsAdditionalParameters.xsd ows/2.0/owsCommon.xsd ows/2.0/owsContents.xsd ows/2.0/owsDataIdentification.xsd ows/2.0/owsExceptionReport.xsd ows/2.0/owsGetCapabilities.xsd ows/2.0/owsGetResourceByID.xsd ows/2.0/owsInputOutputData.xsd ows/2.0/owsManifest.xsd ows/2.0/owsOperationsMetadata.xsd ows/2.0/owsServiceIdentification.xsd ows/2.0/owsServiceProvider.xsd ows/2.0/owsDomainType.xsd http://www.w3.org/2006/03/addressing/ws-addr.xsd sweCommon/2.0/block_components.xsd sweCommon/2.0/advanced_encodings.xsd sweCommon/2.0/basic_types.xsd sweCommon/2.0/choice_components.xsd sweCommon/2.0/record_components.xsd sweCommon/2.0/simple_components.xsd sweCommon/2.0/simple_encodings.xsd sweCommon/2.0/swe.xsd xlink/1.0.0/xlinks.xsd swes/2.0/swes.xsd swes/2.0/swesCommon.xsd swes/2.0/swesContents.xsd swes/2.0/swesDeleteSensor.xsd swes/2.0/swesDescribeSensor.xsd swes/2.0/swesInsertSensor.xsd swes/2.0/swesNotification.xsd swes/2.0/swesUpdateSensorDescription.xsd gml/3.2.1/basicTypes.xsd gml/3.2.1/coordinateOperations.xsd gml/3.2.1/coordinateReferenceSystems.xsd gml/3.2.1/coordinateSystems.xsd gml/3.2.1/coverage.xsd gml/3.2.1/datums.xsd gml/3.2.1/defaultStyle.xsd gml/3.2.1/deprecatedTypes.xsd gml/3.2.1/dictionary.xsd gml/3.2.1/direction.xsd gml/3.2.1/dynamicFeature.xsd gml/3.2.1/feature.xsd gml/3.2.1/geometryAggregates.xsd gml/3.2.1/geometryBasic0d1d.xsd gml/3.2.1/geometryBasic2d.xsd gml/3.2.1/geometryComplexes.xsd gml/3.2.1/geometryPrimitives.xsd gml/3.2.1/gml.xsd gml/3.2.1/gmlBase.xsd gml/3.2.1/grids.xsd gml/3.2.1/measures.xsd gml/3.2.1/observation.xsd gml/3.2.1/referenceSystems.xsd gml/3.2.1/temporal.xsd gml/3.2.1/temporalReferenceSystems.xsd gml/3.2.1/temporalTopology.xsd gml/3.2.1/topology.xsd gml/3.2.1/units.xsd gml/3.2.1/valueObjects.xsd gmd/applicationSchema.xsd gmd/citation.xsd gmd/constraints.xsd gmd/content.xsd gmd/dataQuality.xsd gmd/distribution.xsd gmd/extent.xsd gmd/freeText.xsd …
Run Code Online (Sandbox Code Playgroud) 当某些URL可用时,任何人都可以帮我使用XSD验证带有XSD的XML模式吗?
我是xsd验证的新手,我正在尝试验证一个选择标签是否有一组特定的元素,但也有一个任意命名的元素.类似于以下内容:
...
<xs:choice>
<xs:element name="test1" type="xs:string" />
<xs:element name="test2" type="xs:string" />
<xs:element name="-some regex or something to specify arbitrary name here" type="xs:string" />
</xs:choice>
...
Run Code Online (Sandbox Code Playgroud)
XML:
...
<test1>example text</test1>
<test2>example text again</test2>
<exampleNode>example text</exampleNode>
...
Run Code Online (Sandbox Code Playgroud)
这可能在xsd中吗?验证新的任意命名节点?
我想让XJC在生成bean时在complexType中使用javaType标记.这是不允许的?我真的错过了很好的文档和一些可以理解的错误信息.
这是我正在尝试失败的错误:
这是XSD:
<xs:complexType name="MyMap">
<xs:annotation>
<xs:appinfo>
<xjc:javaType name="my.company.HashMapHidingGenerics" adapter="my.company.adapter.MyMapAdapter" />
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="entry" type="MyEntry"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="MyEntry">
<xs:attribute name="someAttribute" use="optional"/>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud) 在昨天这个类似的问题之后,我有另一个关于XML模式和XJC绑定中的继承的问题.
给出以下选择元素,使Book和Journal具有共同的父类型(Publication
).
<xsd:choice >
<xsd:element name="Book" type="Book" />
<xsd:element name="Journal" type="Journal" />
</xsd:choice>
Run Code Online (Sandbox Code Playgroud)
生成的Java类属性如下:
private Book book;
private Journal journal;
Run Code Online (Sandbox Code Playgroud)
因为<xsd:choice>
意味着可能有一个Book
或一个Journal
我更喜欢
private Publication bookOrJournal;
Run Code Online (Sandbox Code Playgroud)
如果我通过maxOccurs="unbounded"
在choice元素中设置了一个Publications列表,它会以这种方式工作,我会得到
private List<Publication> bookOrJournal;
Run Code Online (Sandbox Code Playgroud)
如何使用非集合属性实现此目的?
我正在将旧数据集转换为schema/xml.它包含一些具有默认值的数组元素.我接近xs:list的解决方案;
<xs:element name="pressure"
default="0.22 0.33 0.44 0.55 0.66 0.77 0.88 0.88 0.88 0.88">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0" />
<xs:maxInclusive value="2.0" />
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
如何将列表的长度限制为10?也就是说,我会把它放在哪里
<xs:length value="10">?
Run Code Online (Sandbox Code Playgroud) 如何使用xsom获取xsd的最大深度.
例如:xsd的每个复杂类型下的元素总数?
此外,如果复杂类型下复杂类型下的元素+属性的数量......使用dom\xsom\jaxb
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="root" type="root">
<xs:annotation>
<xs:documentation>
Comment describing your root element
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="element_count" type="xs:string"></xs:element>
<xs:element name="employee" type="employee" maxOccurs="unbounded" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="employee">
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="ID" type="xs:string"></xs:element>
<xs:element name="Addresses" type="addresses" maxOccurs="1" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="addresses">
<xs:sequence>
<xs:element name="address" type="address" maxOccurs="unbounded" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="address">
<xs:sequence>
<xs:element name="line1" type="xs:string"></xs:element>
<xs:element name="line2" type="xs:string"></xs:element>
<xs:element name="city" type="xs:string"></xs:element>
<xs:element name="type" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud) 使用以下内容我总是得到一个无效的子元素错误.我是XML的新手,我一直在寻找网络,试图弄清楚这一点,但没有运气.我有另一个XSD验证XML提交给我的应用程序,它工作得很好,但它使用属性而不是元素.无法使用XSD中的元素来验证通过我无法控制的第三方应用程序提交的XML.
XSD
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SCCAParticipationList">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Entry">
<xs:complexType>
<xs:sequence>
<xs:element name="Address" type="xs:string" minOccurs="0" />
<xs:element name="CarModel" type="xs:string" minOccurs="0" />
<xs:element name="CarNo" type="xs:string" minOccurs="0" />
<xs:element name="TotalTm" type="xs:string" minOccurs="0" />
<xs:element name="BestTm" type="xs:string" minOccurs="0" />
<xs:element name="Region" type="xs:string" minOccurs="0" />
<xs:element name="MemberNo" type="xs:string" minOccurs="1" />
<xs:element name="FirstName" type="xs:string" minOccurs="1" />
<xs:element name="LastName" type="xs:string" minOccurs="1" />
<xs:element name="Class" type="xs:string" minOccurs="1" />
<xs:element name="Pos" type="xs:string" minOccurs="1" />
<xs:element name="UniqueID" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType> …
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)