.net – 使用xsd.exe工具从具有多个名称空间的XML文件生成XSD文
我想做的事:
我正在尝试为现有的XML文件生成XSD文件. 我正在使用xsd.exe工具(随Visual Studio一起提供). XML文件中的某些元素是名称空间限定的.在某些情况下,本地名称是相同的,如下所示: <images> <icons> <icon url="http://www.icons.com/logo.png"/> </icons> <foo:icons> <foo:foo_icon url="http://www.foo.org/pic.ico"/> </foo:icons> </images> 我得到了什么: 调用xsd.exe myfile.xml会给出错误:无法添加名为“icons”的列:具有相同名称的嵌套表已属于此DataTable. 好的,但这就是命名空间的用途,不是吗?解决这种模棱两可的问题.如果没有名称空间,我只会调用元素foo_icons而不是使用前缀. 我尝试了什么: 我试图寻找一种方法来配置xsd.exe,以便它考虑名称空间,但没有xsd /?我的谷歌查询也没有透露任何答案. / n [amespace]:参数不允许指定多个名称空间. 我读过Working with Namespaces in XML Schema,但我感觉不太明智. 我是否必须创建单独的XSD文件并将它们嵌入到彼此中?它也没有处理使用xsd.exe的问题. 我真的不太熟悉XSD,所以我可能误解了整个过程的一些基本概念.如果有人能指出我正确的方向,我会很感激. 编辑1 – 遵循Marc Gravell的建议: 我试过了,但我还必须重命名一个(带前缀的)元素,它出现在XML的不同部分(在不同的父节点下),因为xsd不允许这样做.我不得不将它重命名为elementOne,elementTwo等.我打算将其重命名为手动.但是我得到的XSD无论如何都不起作用. 标题是: <xs:schema id="NewDataSet" targetNamespace="http://www.foo.com/bar" xmlns:mstns="http://www.foo.com/bar" xmlns="http://www.foo.com/bar" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:app1="http://www.foo.com/bar/extensions" xmlns:app2="http://www.w3.org/XML/1998/namespace"> 当我尝试用它验证文件时,我收到一个错误: 前缀’app2’无法映射到为“xml”或“xmlns”保留的命名空间名称. 那么,xsd.exe的目的是什么呢?该如何修复? 解决方法
你使用xsd.exe给你一个XML Schema的方式……它实际上试图想出一个DataSet;而.NET上的确非常有限.
我将使用.NET上提供的另一个选项:使用记录为here的.NET API构建脚本. 至少对于你的XML片段,它会起作用;我试过了,它创建了一个有效的XmlSchemaSet.下面是我使用我正在使用的工具运行的测试,它依赖于相同的API(有一些额外的铃声和口哨,否则你将不得不手动做一些小修复). 修复了XML(为foo前缀添加了缺少的名称空间声明): <images> <icons> <icon url="http://www.icons.com/logo.png"/> </icons> <foo:icons xmlns:foo="urn:tempuri-org:test"> <foo:foo_icon url="http://www.foo.org/pic.ico"/> </foo:icons> </images> 顶级架构(没有目标命名空间,与您的images元素匹配): <?xml version="1.0" encoding="utf-8"?> <!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> <xsd:schema xmlns:foo="urn:tempuri-org:test" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import schemaLocation="XSDMultipleNamespaces1.xsd" namespace="urn:tempuri-org:test" /> <xsd:element name="images"> <xsd:complexType> <xsd:sequence> <xsd:element name="icons"> <xsd:complexType> <xsd:sequence> <xsd:element name="icon"> <xsd:complexType> <xsd:attribute name="url" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element ref="foo:icons" /> </xsd:sequence> </xsd:complexType> foo命名空间的架构: <?xml version="1.0" encoding="utf-8"?> <!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> <xsd:schema xmlns="urn:tempuri-org:test" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:tempuri-org:test" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="icons"> <xsd:complexType> <xsd:sequence> <xsd:element name="foo_icon"> <xsd:complexType> <xsd:attribute name="url" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> 生成的XML Schema文件可以验证您的XML. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |