我正在从提供给我的XSD生成c#类文件。如果仅使用原始的本机XSD,我就能做到这一点而没有问题。但是,我想通过添加我自己的命名空间来修改XSD,并且我想通过生成器提供新修改的XSD,以生成一个包含我提供的类定义以及我添加的定义的类文件。
所以我的理解是,我需要添加一个名称空间以及该名称空间下的新属性。我确实具有访问权限,并且能够修改原始XSD或添加自己的XSD。
我看了这篇与Extend XSD with custom attributes?类似的帖子
下面是我尝试的一个示例。在尝试中,我试图在“ mns”命名空间下的DeviceInfo元素中添加属性“ Humidity”。当前,这表明“在此上下文中不支持'mns:attribute'元素。”
test.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://MyNamespace.com"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="DeviceInfo">
<xs:complexType>
<xs:attribute name="Humidity" type="xs:float" />
</xs:complexType>
</xs:element>
</xs:schema>
main.xsd
<xs:schema targetNamespace="http://www.CIP4.org/JDFSchema_2_0"
xmlns="http://www.CIP4.org/JDFSchema_2_0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mns="http://MyNamespace.com"
xsi:schemaLocation="http://MyNamespace.com ./test.xsd"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="DeviceInfo">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="Activity"/>
<xs:element maxOccurs="2" minOccurs="0" ref="FileSpec"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="JobPhase"/>
</xs:sequence>
<xs:attribute name="CounterUnit" type="NMTOKEN" use="optional"/>
<mns:Humidity value="0"/>
</xs:schema>
当前,此上下文不支持返回“ mns:湿度”元素。
有人可以解释如何将其插入复杂类型吗?
我还尝试将mns:Humidity放置在与deviceInfo相同的标签中
<xs:element name="DeviceInfo mns:Humidity="0">
通过类生成器发送了两个单独的“ DeviceInfo”实例,其中第二个实例附加了一个1。
如何将其插入带有名称空间的complexType中?
答案 0 :(得分:0)
在main.xsd中的DeviceInfo声明中,添加
<xs:attribute ref="mns:Humidity"/>
加上“ mns”的名称空间声明和带有xs:import
的该名称空间的schemaLocation="test.xsd"
声明。
在test.xsd
中包含单个声明
<xs:attribute name="Humidity" type="xs:float"/>
您尝试解决的问题表明您正在使用试错法,而不是实际阅读XSD中的结构实际含义。那不是前进的好方法。您似乎对这些概念感到困惑,例如,架构永远不应包含xsi:schemaLocation
属性。