`

如何由XSD自动生成XML和实体类

    博客分类:
  • java
 
阅读更多

项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据;读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。
  自动读取XML数据到实体类:

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->XmlSerializer xs =new XmlSerializer(typeof(myClassType));
using (FileStream fs =new FileStream(XmlFilePath, FileMode.Open))
{
return (myClassType)xs.Deserialize(fs);
}

  如何由XML生成XSD?

  - 可以用工具,如XMLSpy,首先打开XML, 然后DTD/Schema -> Generate DTD/Schema, 选择W3c Sehcma即可。

  - 此方法不一定能生成确切满足需求的XSD,另需修改。


  如何由XSD生成XML?

  - 可以用其他工具,如XMLSpy,DTD/Schema -> Generate sample XML file...

  - 可以由XSD生成类,然后写代码实例化这个类,最后序列化为XML

  - 如何自动给类每个属性设置一个空值:(用反射的方法)

  代码示例:

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->///<summary>/// Get all properties and set default value
///</summary>///<typeparam name="T">Type</typeparam>///<param name="item">Object</param>privatestaticvoid ReflctProperties<T>(T item)
{
PropertyInfo[] pty =typeof(T).GetProperties();
Type t = item.GetType();
if (pty !=null)
{
foreach (PropertyInfo info in pty)
{
if (!info.CanWrite) continue;
if (info.PropertyType ==typeof(String))
{
t.GetProperty(info.Name).SetValue(item, String.Empty, null);
}
if (info.PropertyType ==typeof(Boolean))
{
t.GetProperty(info.Name).SetValue(item, true, null);
}
}
}
}

  反射读取类的属性:

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->publicstaticobject GetProperty<T>(T item, string PropertyName)
{
PropertyInfo propertyInfo = item.GetType().GetProperty(PropertyName);
if (propertyInfo !=null)
{
return propertyInfo.GetValue(item, null);
}
returnnull;
}

  如何序列化为XML?

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->///<summary>/// Serialize class instance to XML file
///</summary>///<typeparam name="T">type</typeparam>///<param name="XMLFileToCreate">XMLFileToCreate</param>///<param name="instance">class instance</param>publicvoid Serialize<T>(string XMLFileToCreate, T instance)
{
if (instance ==null) return;
XmlSerializer xs =new XmlSerializer(typeof(T));
using (StreamWriter sw =new StreamWriter(XMLFileToCreate))
{
xs.Serialize(sw, instance);
}
}

  如何使用XSD来验证XML文件合法性:

  - 使用XMLSpy,首先Assign XSD,然后验证 (其实就是设置XML里面引用的schema,注意schema可能引用其他的schema)

  - 代码中验证:

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  Validate XML against XSD#region Validate XML against XSDpublicclass Validator
{
privatestring errMsg;
/**////<summary>/// validation Error Msg
///</summary>publicstring validationErrMsg
{
get { return errMsg; }
set { errMsg = value; }
}
/**////<summary>/// Validate XML against schema
///</summary>///<param name="XSD"></param>///<param name="XMLFile"></param>///<param name="LocationDefined"></param>///<returns></returns>publicbool Validate(string XSD, string XMLFile, bool LocationDefined)
{
bool isValid =true;
try
{
Stream schemaFile =null;
XmlReaderSettings settings =new XmlReaderSettings();
ValidationEventHandler SchemaValidationEventHandler =new ValidationEventHandler(ValidationCallBack);
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.AllowXmlAttributes;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += SchemaValidationEventHandler;
if (LocationDefined ==true)
{
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
}
else
{
schemaFile =new FileStream(XSD, FileMode.Open);
XmlSchema tmsSchema = XmlSchema.Read(schemaFile, SchemaValidationEventHandler);
settings.Schemas.Add(tmsSchema);
}
using (XmlReader reader = XmlReader.Create(XMLFile, settings))
{
string test;
while (reader.Read() && isValid ==true)
{
test = reader.Name;
}
};
if (schemaFile !=null)
{
schemaFile.Close();
}
}
catch (Exception e)
{
validationErrMsg +="Exception occured when validating. "+ e.Message;
isValid =false;
}
return isValid;
}
/**////<summary>/// Display any warnings or errors.
///</summary>///<param name="sender"></param>///<param name="args"></param>publicvoid ValidationCallBack(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
{
validationErrMsg +="Matching schema not found. No validation occurred."+ args.Message;
validationErrMsg = args.Message;
}
else
{
validationErrMsg +="\nValidation error: "+ args.Message;
validationErrMsg = args.Message;
}
}
}
#endregion

 

<!-- google_ad_section_end -->
 
<!--正文内容结束--><!--关于内容的操作开始--><!--发表评论开始--><!-- 070328修改 ws begin -->
 
分享到:
评论

相关推荐

    通过xsd产生C#实体类解析XML或生成XML

    本教程将详细介绍如何使用XSD文件生成C#实体类,以便于解析XML数据和生成XML文档。 首先,我们需要一个XSD文件,它定义了XML文档的结构和数据类型。XSD文件使用元素、属性和约束来描述XML文档的结构。例如,一个...

    trang工具xml自动生成实体类,xds文件自动生成实体类

    将trang.jar和要解析的xml放在同一目录,在当前文件下执行如下命令,其中users.xsd为要生成的xsd文件名 java -jar trang.jar users.xml users.xsd 执行完上述命令后会在当前文件生成users.xsd,然后执行如下命令,...

    jaxb for xjc 命令 实体类生成工具

    XJC是JAXB的一部分,它是一个命令行工具,用于从XML Schema (XSD) 文件生成对应的Java实体类。这些实体类可以帮助开发者直接操作XML数据,而无需关心底层解析和序列化的细节。 在Java开发中,当处理XML数据时,通常...

    xml文件自动转成java对象工具

    5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...

    castor实现xsd生成javabean所需jar

    D:\xsd/castor-1.2-xml-schema.jar;D:\xsd/castor-1.2-xml.jar;D:\xsd/castor-1.2.jar;D:\xsd/velocity-1.4.jar;D:\xsd/commons-logging.jar org.exolab.castor.builder.SourceGeneratorMain -types j2 -i "D:\xsd\...

    报文xml到java的相互,里面有说明文档!

    3. **实体类生成**:报文生成实体类工具可能是一个自动生成Java类的工具,这些类对应于XML报文的结构。这可以极大地提高开发效率,减少手动编码的工作量。工具可能通过读取XML Schema(XSD)文件来生成类,确保了...

    jaxb xml转化为对象,对象转化为xml,xml转化为xsd,表转化为对象

    这些框架可以将数据库表映射为Java实体类,而JAXB则负责将这些实体类转化为XML或者从XML恢复实体类。通过这种方式,我们可以在数据库、Java对象和XML之间建立起灵活的桥梁。 在实际应用中,JAXB通常用于Web服务、...

    xmlspy转换工具

    确认设置后,点击“Generate”按钮,XMLSpy将自动生成与XSD对应的Java实体类。 3. **理解和配置生成选项**:XMLSpy允许你定制生成的Java代码,例如可以选择生成JAXB兼容的代码,或者使用特定的注解(如JPA的@Entity...

    xmlbuddy eclipse插件,编写xml文件

    例如,当添加一个新的实体类映射时,插件可以自动生成对应的`&lt;class&gt;`标签,并自动补全实体类的属性和关联关系。 此外,XMLBuddy还支持XML Schema(XSD)和DTD(Document Type Definition)验证。开发者可以指定XML...

    JAXB xml与对象转换

    2. **添加注解**:在Java类和字段上添加JAXB注解,这些注解告诉JAXB如何映射XML元素和属性。 3. **创建Unmarshaller和Marshaller对象**:使用`javax.xml.bind.JAXBContext`类来创建Unmarshaller和Marshaller对象,...

    Asp.net网站使用.Net实用工具XSD.EXE和.NET类来处理XML文档

    首先,XSD.EXE是一个.NET框架自带的命令行工具,它允许开发者从XML Schema(XSD)文件生成C#类,这些类可以方便地映射到XML文档结构。通过以下步骤,你可以创建这些类: 1. **创建XML Schema**:定义XML文档的结构...

    XSD实体装换工具

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例...

    动态创建xml问卷

    在这个场景中,"动态创建XML问卷"意味着程序可以根据需求动态生成XML结构来表示问卷,而不是预先硬编码问卷的问题和选项。下面将详细探讨这个主题。 1. **XML基础知识** - **XML元素**:XML文档由一系列元素构成,...

    xml_java指南

    XML文档由元素、属性、实体和注释等构成,遵循严格的语法规则。 二、Java与XML的交互 1. 解析XML:Java提供了多种解析XML的方法,包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming ...

    java xml 编程指南

    5. **Java Architecture for XML Binding (JAXB)**:JAXB允许Java对象和XML之间进行自动转换,简化了数据绑定的过程。它能够将Java类生成对应的XML Schema,反之亦然,大大提高了开发效率。 6. **Java XML Binding ...

    构建XML Web服务:基于Microsoft NET平台

    8. **Web服务消费**:在.NET中,使用Add Web Reference或Add Service Reference功能,可以从WSDL自动生成客户端代理类,这些类提供了与Web服务交互的方法。调用这些方法就像调用本地方法一样简单。 9. **安全性**:...

    xerces.jar xml解析 生成必备工具包.zip

    在C#环境中,虽然Xerces主要是为Java设计的,但开发者可以利用.NET Framework的System.Xml命名空间,该命名空间提供了类似的功能,例如XmlDocument、XmlNodeReader和XPathNavigator等类。这些类可以用来解析、操作和...

    J2EE之xml的建模

    3. **实体(Entities)**:XML实体允许我们在文档中引用外部资源,比如引用另一个XML文件,或者定义可重用的文本片段。 **在Eclipse中处理XML** 1. **XML编辑器**:Eclipse提供了强大的XML编辑器,支持语法高亮、...

    XML读取解析,(初学者)

    XML文档由一系列元素组成,每个元素都有开始标签(如`&lt;element&gt;`)和结束标签(如`&lt;/element&gt;`)。元素可以包含其他元素、文本或属性。文档必须遵循一定的语法规则,例如所有元素都必须关闭,属性值必须用引号包围,...

Global site tag (gtag.js) - Google Analytics