- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想做什么:
我正在尝试为现有的 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
的方法,以便将 namespace 考虑在内,但是 xsd/?
和我的 google 查询都没有找到任何答案。 /n[amespace]:
参数不允许指定多个 namespace 。
我读过 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 模式的方式……它实际上试图提出一个数据集;而在 .NET 上确实非常有限。
我会使用 .NET 上可用的另一个选项:使用记录在案的 .NET API 构建脚本 here .
至少对于您的 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>
顶级架构(无目标命名空间,与您的图像元素匹配):
<?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 架构文件可以很好地验证您的 XML。
关于.net - 使用 xsd.exe 工具从具有多个命名空间的 XML 文件生成 XSD 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210589/
我知道我以前在某个地方看到过这个,但我再也找不到它了。我需要一个从另一个 xsd 中调用 xsd 文件的示例。这在生成大量 xml 文件的情况下非常有用,但在这些 xml 文件之间存在大量公共(pub
有人知道供应商中立的 XSD 来描述关系数据库模式吗?我们的系统需要获取有关数据库结构的信息: 表 列和类型 主键和外键约束 索引 等 以独立于供应商的方式并将其存储在 XML 文件中以供以后处理。
我在 XSD 中使用 gml (3.1.1) XSD 作为我的应用程序。我想下载版本 3.1.1 中的所有 gml XSD,例如 zip 文件。换句话说:基本 xsd 是 here我想用 zip 文件
我想要一个 XSD 来验证包含具有许多别名但每个别名具有不同值的文件元素的 XML。 这是我的 XML: Document1
我看到一个 xml 架构 ( EPP ) 将 xsd:choice 与一个元素一起使用,即使我们可以使用 xsd:enumeration 代替:
我目前工作的公司将架构或契约(Contract)版本编入根节点。例如, ... 我正在寻找人们对这种设计方法的意见,因为我不相信它是合理的。例如,它要求所有使用此模式作为消息传递契约的服务都能够发
我在处理 Web 服务响应时遇到了 Apache CXF 解析错误。归结为一个空元素被返回: 元素定义如下: 现在我在 CXF 邮件列表上看到了 empty value is not allowe
XSD 可以为比较两个元素添加约束吗? 假设我在 DataRangeType 下有 Begin End 我想添加一个约束说 Begin 非常
我想声明一个要包含在复杂类型声明中的元素,并且该元素有一个强制属性:“option=MyOption”,但是“选项”属性的值可以是任何值,具体取决于上下文。 也就是说:在使用包含该元素的复杂类型的任何
我需要能够将简单元素类型设置为整数,但也可以将其设置为空。如果此示例为空且空白字段不是整数,则此示例将发送错误。我该如何解决? 最佳答案 您要做的是在同一元素上分配限制,并对其进行合并,例如以下示例
对于这个 xml: 我有这个模式,它似乎可以根据 w3 schema validation service 进行验证,并且该架构可以很好地验证上述 XML。遗憾的是,xsd.exe
我有两个 XSD 文件(源文件和目标文件)...我应该在什么基础上映射这两个文件以获得 XSLT?我知道 MapForce 如何帮助映射,但我使用示例项目..现在我想知道我应该在什么基础上映射我的客户
我有一个 .cs 文件,其中包含 XTypedElement 和 IXMetaData 的子类。微软有一个 tool that generates XSD files automatically来自托
这个问题在这里已经有了答案: XML Schema to validate XML Schemas? (3 个答案) 关闭 9 年前。 是否存在可验证其他 XML 架构的 Xml 架构? 我想做的是
假设我正在处理一个 xsd:simpleType,它是一个字符串,需要具有特定的字符集和特定的最大长度,类似于以下代码: 所以我的 xsd 类型将是一个只
JAXB 同时映射 xsd:base64Binary和 xsd:hexBinary类型为 byte[] . 鉴于我有一个架构/DOM 元素代表这些类型中的每一个,例如: ABCD对于 xsd:hexB
我非常确定我在这里遗漏了一些简单的东西。 我正在使用 netbeans 在两个单独的项目中创建一个 web jax-ws web 服务和一个客户端,并且我有一些自定义绑定(bind)已使用 net b
将字节数组表示为 XSD 架构的最佳方式是什么?我有一个字节输入,我需要解析它并将其提供给 JAXB 从 XSD 模式生成的 Java 对象以供将来验证。我输入中的每条信息都由偏移量和长度定义。我想将
我的架构的这一部分给我带来了麻烦:
我需要定义元素“MyData”的名为“DataValue”的属性。但要求是“DataValue”的类型可以动态更改,即数据值在一个实例中可以是字符串,而在其他实例中它可以是 int 或 bool。它可
我是一名优秀的程序员,十分优秀!