以下是导致异常的代码片段:
org.springframework.web.client.RestTemplate rt
.getForObject(uri, type, vars);
Run Code Online (Sandbox Code Playgroud)
例外是:
嵌套异常是org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段"d"(类com.xsd.myObj),未标记为可忽略
这是否意味着正在读取的xml文档中有一个名为"d"的字段,该字段应该位于java/xsd文件中?我可以采取哪些步骤来修复此错误?
有没有办法在XML Schema中指定列表的元素必须按某些文本节点排序?
例如:
我想制作一个xsd,以下xml是有效的:
<root>
<Users>
<User>
<Id>1</Id>
<Username>lsuarez</Username>
</User>
<User>
<Id>3</Id>
<Username>dforlan</Username>
</User>
<User>
<Id>7</Id>
<Username>ecavanni</Username>
</User>
</Users>
</root>
Run Code Online (Sandbox Code Playgroud)
但以下不是:
<root>
<Users>
<User>
<Id>7</Id>
<Username>ecavanni</Username>
</User>
<User>
<Id>1</Id>
<Username>lsuarez</Username>
</User>
<User>
<Id>3</Id>
<Username>dforlan</Username>
</User>
</Users>
</root>
Run Code Online (Sandbox Code Playgroud)
也就是说,集合中的元素按User.Id排序
我有一些非常复杂的XSD架构可供使用.复杂意味着这些XSD中的每一个都对应于数据库中的大约20个类/表,每个表具有大约40个字段.我有18种不同的XSD来编程.
我想要实现的是:获取XSD定义的XML文件,并使用SQLAlchemy将所有数据保存在PostgreSQL数据库中.基本上我需要一个CRUD应用程序,它将遵循XSD模式的模型在数据库中保存XML文件,并且还能够从数据库中检索对象并创建XML文件.
我想避免手动创建python类,sqlalchemy表定义,CRUD代码.鉴于XSD文件的复杂性,这将是一项巨大的工作,受到许多小错误的影响.
我可以通过许多方式从XSD生成python类,如GenerateDS,PyXB等......我需要将这些对象保存在数据库中.我愿意接受任何建议,即使这个建议在概念上与我所描述的不同.
非常感谢你
我的XML文件中有一个元素,其值可以是decimal或date.在用于验证的XML模式中,我将其指定为:
<xs:element name = "data" type="xs:decimal"/>
Run Code Online (Sandbox Code Playgroud)
或者我可以指定为type="xs:date"
.
这仅将其验证为日期或小数.是否有其他数据类型或某些东西允许我验证此元素,无论它是否具有日期或小数值?
我正在试图对xsd验证xml.以下是xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns="http://www.w3schools.com" targetNamespace="http://www.xxxxxxxxxxxxx/xxxxxxxx" xmlns:cl="http://www.xxxxxx/contactlist" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:complexType name="contactNumberType">
<xsd:all>
<xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="number" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="contactNumbersType">
<xsd:sequence>
<xsd:element name="contact_number" type="contactNumberType" minOccurs="1" maxOccurs="2"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="contactType">
<xsd:all>
<xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="company" type="xsd:string" minOccurs="0" maxOccurs="1"/>
<xsd:element name="jobtitle" type="xsd:string" minOccurs="0" maxOccurs="1"/>
<xsd:element name="emailadress" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="addresses" type="addressesType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="contact_numbers" type="contactNumbersType" minOccurs="1" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="addressType">
<xsd:all>
<xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="street_address1" …
Run Code Online (Sandbox Code Playgroud) 使用Xerces SAX库XSModel
作为XSD语法的表示,如果我有一个引用模型组的复杂类型,我该如何检索模型组?似乎XSModel
由Xerces提供的实例所表示的复杂类型定义仅提供对组的扁平(扩展)内容(对应于组的元素)的访问,而不是实际组或对组定义的引用(甚至是小组的名字; XSModelGroupImpl
's- getName()
method也包括return null
......).
尝试格式化文本以便在从XML拉到XSLT 1.0时显示为DD-MM-YYYY,因为我知道在使用xs:date时必须在XSD/XML中将其设置为YYYY-MM-DD,这就是我所拥有的用过的.
以下是我正在处理的代码,有关如何显示此代码的任何建议?
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<events xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="events.xsd">
<venue id="01"
vtitle="ExCeL Exhibition Centre"
location="London"
telephone="0844 448 7600">
<event name="Doctor Who 50th Celebration" date="2013-10-22">
<image>images/doctor50.jpg</image><attribute>Doctor Who Event</attribute>
<description>A 50th Anniversary musical bonanza for Doctor Who.</description>
<ticket_price type="adult" status="available">£25.00</ticket_price>
<ticket_price type="child" status="none">£11.00</ticket_price>
<ticket_price type="junior" status="available">£0.00</ticket_price>
<email>info@roundhouselondon.com</email>
</event>
</venue>
Run Code Online (Sandbox Code Playgroud)
XSD
<xs:attribute name="date" type="xs:date"/>
Run Code Online (Sandbox Code Playgroud)
XSLT
<xsl:element name="date"><xsl:value-of select="@date"/></xsl:element>
Run Code Online (Sandbox Code Playgroud)
HTML
<date>2013-10-22</date>
Run Code Online (Sandbox Code Playgroud) 有一个XML:
<?xml version="1.0" encoding="utf-8" ?>
<FirstSection FirstSectionAttr="5" >
<SecondSection Value="0x15"/>
<SecondSection Value="10"/>
</FirstSection>
Run Code Online (Sandbox Code Playgroud)
有一个XSD(由VS创建):
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="FirstSection">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="SecondSection">
<xs:complexType>
<xs:attribute name="Value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="FirstSectionAttr" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
有一个代码可以验证:
static void Validate(string xsdPath, string fullFileName)
{
try
{
var settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", xsdPath);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += OnXmlValidationEventError;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
using (var reader = XmlReader.Create(fullFileName, settings))
{
while (reader.Read()) …
Run Code Online (Sandbox Code Playgroud) 我的xml文件中的代码段:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- http://www.springframework.org/schema/aop -->
<!-- http://www.springframework.org/schema/aop/spring-aop.xsd"> -->
<context:component-scan base-package="myPackage" />
Run Code Online (Sandbox Code Playgroud)
执行后我看到以下消息:
WARN [WrapperSimpleAppMain] [XmlBeanDefinitionReader]忽略XML验证警告org.xml.sax.SAXParseException; lineNumber:14; columnNumber:80; SchemaLocation:schemaLocation value =' http://www.springfr amework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.spri ngframework. org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springfra mework.org/schema/context/spring-context-3.1.xsd'必须有均匀URI的数量.at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
怎么解决这个问题吧?
我希望将几个模式转换为Java代码.模式都很相似; 例如,每个人都有一个TXLife根对象.如果每个模式生成具有唯一类名的代码,则管理代码会更容易.我可以使用"package"绑定将每个模式的代码放入自己的包中,但是当我尝试使用"prefix"绑定来更改类名时,它会忽略它.
这是我的schema_bindings.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0"> <jaxb:bindings schemaLocation="schemas/HI_Request.xsd" node="/xsd:schema"> <jaxb:schemaBindings> <jaxb:package name="com.mycompany.hi"/> <jaxb:nameXmlTransform> <jaxb:typeName prefix="Hi_"/> </jaxb:nameXmlTransform> </jaxb:schemaBindings> </jaxb:bindings> </jaxb:bindings>
当我运行xjc命令时,我得到了(我必须修改xjc.bat文件中的类路径才能使它工作):
C:\ test>\progs\Java\jaxb-ri-2.2.7\bin\xjc.bat -extension -d src -b schema_bindings.xml schemas
parsing a schema... compiling a schema... com\mycompany\hi\Holding.java com\mycompany\hi\InquiryLevel.java com\mycompany\hi\KeyedValue.java com\mycompany\hi\OLifE.java com\mycompany\hi\ObjectFactory.java com\mycompany\hi\Policy.java com\mycompany\hi\TXLife.java com\mycompany\hi\TXLifeRequest.java com\mycompany\hi\TransMode.java com\mycompany\hi\TransSubType.java com\mycompany\hi\TransType.java
我希望的是每个java文件(以及里面的类)都会被命名为"Hi_ <name>".Jaxb似乎完全忽略了我的"前缀"规范.我在绑定文件上尝试了几种变体.我也尝试使用Ant xjc任务进行相同的绑定,所有结果都相同.
我可以使用这些结果,但这意味着处理来自一个模式的输入并将输出生成到另一个模式的代码必须使用完全限定的类名来引用对象,这很尴尬.
xsd ×10
xml ×8
java ×3
spring ×2
.net ×1
date ×1
datetime ×1
jaxb ×1
postgresql ×1
python ×1
rest ×1
spring-mvc ×1
sqlalchemy ×1
validation ×1
web-services ×1
xerces ×1
xslt ×1