Tag: xsd

在Code中从XML创建XSD

我正在使用MSDN这段代码从XML创建XSD XmlReader reader = XmlReader.Create(“contosoBooks.xml”); XmlSchemaSet schemaSet = new XmlSchemaSet(); XmlSchemaInference schema = new XmlSchemaInference(); schemaSet = schema.InferSchema(reader); foreach (XmlSchema s in schemaSet.Schemas()) { textbox.text = s.ToString(); } 我想根据我的xml文件输出.xsd。 当我生成.xsd文件时,我唯一得到的内容是: System.Xml.Schema.XmlSchema 当我使用Visual Studio选项生成XSD来创建Schema时,它会正确显示。 但是,我有超过150个xml文档,我需要创建XSD,因此需要一个编程选项。 有人可以帮忙吗?

为C#生成的XSD for XML文档?

有没有人知道是否有某个XSD文件可用于validation在使用/ doc选项编译C#项目时生成的XML文档? 我想在生成后手动修改该文件,我正在寻找一种简单的方法来确认我没有损坏文件的结构。 谢谢。

C#web-service客户端:具有相同(复杂)返回类型的多个Web服务方法?

我正在努力建立一个Java B2B Web服务的客户端,我想我已经确定了我们已经遇到的问题的原因已经有一段时间了。 不幸的是我无法发布WSDL。 显然,我的自动生成的代理代码(通过wsdl.exe:由于WCF不支持密码摘要而必须使用WSE 3.0)无法处理具有多个具有相同复杂返回类型的Web方法的Web服务的WSDL。 举例来说 – 一个定义以下方法的Web服务: Public ComplexTypeX Blah(); Public ComplexTypeX Blue(); Public ComplexTypeX Foo(); Public ComplexTypeY Bar(); 在我的Reference.cs文件中,如果我注释掉所有调用Blah(),Blue()或Foo()中的任何两个的代码,那么剩余的未注释方法可以被调用没有问题。 但是,如果我没有注释掉这三个方法中的多个(例如,Blah()和Foo()),那么在实例化 Web服务客户端代码时,我会收到以下错误消息: “方法Blah无法反映出来。” “命名空间’ http://some.url ‘中的XML元素’ComplexTypeX’引用方法和类型。使用WebMethodAttribute更改方法的消息名称,或使用XmlRootAttribute更改类型的根元素。” 现在,肯定没有将ComplexTypeX方法定义为Web服务的一部分,所以我只能假设.NET(或至少wsdl.exe)不允许您使用返回复杂的Web服务(用户定义) )跨多种方法的相同类型的类型……对吗?

如何让LinqToXSD正确输出名称空间前缀声明?

我正在尝试使用LinqToXSD创建XML数据绑定类和包含许多导入模式的XML模式。 所有模式都位于此处。 为此,我使用了以下根模式文档: Tmats Root 我使用Linq到XSD创建了类。 然后我写了以下测试: [TestMethod()] public void TmatsXmlExample4() { Tmats tmats = new Tmats { ProgramName = “My Program”, OriginationDate = DateTime.Now, }; tmats.PointOfContact.Add(new PointOfContactType { Address = “12345 Anywhere Street”, Agency = “My Agency”, Name = “Robert Harvey”, Telephone = “111-222-3333” }); Debug.Print(tmats.ToString()); } 我期望输出看起来像这样: My Program 2012-05-09-07:00 Robert Harvey My […]

svcutil.exe是xsd.exe的替代品吗?

我正在使用xsd.exe从.xsd文件生成一些c#类。 我遇到了此处和其他网站上涉及的相同问题,其中xsd.exe生成Type []数组,而不是.xsd文件中类型的通用List集合。 有些人建议如果将/ dataContractOnly参数传递给svcutil.exe,svcutil.exe可以用作xsd.exe的替代品。 但是,似乎这些人都错了,因为svcutil.exe实际上生成了System.Xml.XmlNode []数组属性,而不是基于.xsd文件中的模式创建类型。 例如,给定这个简单的.xsd架构: ‘xsd.exe / classes Example.xsd’生成: public partial class Employees { private Employee[] employeeField; public Employee[] Employee { get { return this.employeeField; } set { this.employeeField = value; } } } public partial class Employee { private string firstNameField; private string lastNameField; public string FirstName { get { return […]

基于模式为XML文件创建WPF编辑器

这是场景。 我们为我们的某个服务器产品使用大型XML配置文件。 此文件布局合理,并针对XSD文件进行validation。 现在是时候构建一个用于维护此文件的配置GUI,我想深入研究WPF来实现它。 我可以为每个配置部分布置一个单独的表单,每次我们在配置文件中添加一个选项时重构和重新分发,但我希望有一个更聪明的方法来做到这一点。 由于我已经有一个强类型的xml / xsd组合,我希望有一种优雅的方法来构建一个UI来轻松编辑它。 我知道我可以编写一个xml-> xaml转换,但希望有一些东西可以帮我完成繁重的工作吗? 提前致谢..

C#中XML Schema的代码生成有哪些限制?

我已经看到了几个关于使用xsd.exe从XML Schema生成类的问题,以及如何预先处理模式(通常使用XSLT)来解决生成之前的一些棘手问题的建议。 我的问题是,是否可以构建一个100%符合XML Schema的C#代码生成器。 xsd.exe的问题仅仅是它的实现问题,还是它们指向XML Schema和C#之间的根本不一致? 特别是 ,我对如何将XML Schema中的概念映射到C#感兴趣 – 哪些是可接受的映射,哪些映射是有争议的,是否存在本质上不可映射的XML Schema构造,是否存在未充分利用的C#构造? 是否存在可提供映射规则的合规性规范,以便可以实施和测试? 编辑:为了清楚起见,我完全清楚XML Schema不会为我提供完全实现的C#接口,我对它是否可以完全映射到C#类层次结构感兴趣。 编辑2:我添加了一笔小额奖金,因为我有兴趣获得更多细节。 编辑3:赏金仍然开放,但到目前为止走向stakx – 一个很好的答案,但主要是处理如何在XML Schema中复制C#结构,而不是相反。 虽然好的输入。

在C#中单次读取和validationXML与引用的XSD

我正在尝试从XML文件中读取数据,并根据它建议的XSD将其validation到单个数据结构(例如XmlDocument)中。 我有一个解决方案,但它需要2次通过文件,我想知道是否有单程解决方案。 MyBooks.xml: Book A Book B Books.xsd: 假设MyBooks.xml和Books.xsd位于同一目录中。 validation: //Given a filename pointing to the XML file var settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; settings.CloseInput = true; settings.ValidationEventHandler += new ValidationEventHandler(ValidationCB); //eg: //private static void ValidationCB(object sender, ValidationEventArgs args) //{ throw new ApplicationException(args.Message); } […]

一个XSD,两个代码生成工具,两个命名空间

我有一个XSD文件,我也想从中生成C#和Java类。 我首先根据我的类所在的C#命名空间在XSD中设置命名空间。 这一代(使用Microsoft工具)工作正常,序列化也很有效,我可以针对XSDvalidation它们 – 完美。 现在我想用JAXB创建java类。 问题是要创建的类具有与C#中的类不同的包结构。 因此,当我将XSD命名空间设置为java的包结构时,它工作正常。 我可以序列化并validationXML。 现在我的问题:有没有办法解决这个问题? (两个生成工具都有一个XSD)我是否缺乏对实际需要名称空间的理解? 谢谢 编辑:由于似乎有一个误解,我添加了一个例子 XSD:targetNamespace =“http://foo.bar/mySubNs/model” C#Modelnamespace:com.foo.mySubNs.model(适合XSD名称空间)所有生成的类将具有通过MS codegen提供的相同名称空间 Java Modelnamespace:com.foo.myOtherSubNs.model(与XSD名称空间不同)生成的类将具有“C#名称空间”。 因此,类将无法编译。 如果我在java代码生成期间更改命名空间,我可以编译类。 到现在为止还挺好。 但是由于命名空间不同,我无法通过针对XSD的java类validation生成的XML。 要用Java编组我的对象,我使用这样的JAXB: ValidationEventCollector validationCollector = new ValidationEventCollector(); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(new File (“my/schema/location”)); // JAXB_CONTEXT is just an instance of “JAXBContext” Marshaller marshaller = JAXB_CONTEXT.createMarshaller(); marshaller.setSchema(schema); marshaller.setEventHandler(validationCollector); marshaller.setProperty(Marshaller.JAXB_ENCODING, “UTF-8”); […]

为什么XmlDocument Validate事件处理程序没有被命中?

我有这个代码: // Load the document XmlDocument xmlDocument = new XmlDocument(); // use the stream and have it close when it is finished using ( argInputStream ) { xmlDocument.Load( argInputStream ); xmlDocument.Schemas.Add( XmlSchema.Read( argSchemaStream, null ) ); xmlDocument.Validate( ValidationEventHandler ); } // this is not getting hit void ValidationEventHandler( object sender, ValidationEventArgs e ) { switch […]