【问题标题】:How to add custom Attributes to ComplexType Elements in xsd?如何在 xsd 中向 ComplexType 元素添加自定义属性?
【发布时间】:2019-05-09 00:53:10
【问题描述】:

我正在从提供给我的 XSD 生成一个 c# 类文件。如果只使用原始的本机 XSD,我可以毫无问题地做到这一点。但是,我想通过添加我自己的命名空间来修改 XSD,并且我想通过生成器提供新修改的 XSD 以生成一个类文件,其中包含我提供的类定义以及我添加的定义。

所以我的理解是我需要添加一个命名空间以及该命名空间下的新属性。我确实有权修改原始 XSD 或添加我自己的 xsd。

我看了这篇类似Extend XSD with custom attributes?的帖子

我的尝试示例如下。在我的尝试中,我试图将属性“湿度”添加到“mns”命名空间下的 DeviceInfo 元素。这当前显示“在此上下文中不支持'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:humidity' 元素。

谁能解释我如何将它插入到复杂类型中?

我也尝试将 mns:Humidity 放在与 deviceInfo 相同的标签中

<xs:element name="DeviceInfo mns:Humidity="0">

通过类生成器发送它会产生两个单独的“DeviceInfo”实例,其中第二个附加了一个 1。

如何将其插入到带有命名空间的 complexType 中?

【问题讨论】:

    标签: c# xml xsd


    【解决方案1】:

    在main.xsd中,DeviceInfo的声明中,添加

    <xs:attribute ref="mns:Humidity"/>
    

    加上“mns”的命名空间声明和带有schemaLocation="test.xsd" 的命名空间声明xs:import

    test.xsd 中包含单个声明

    <xs:attribute name="Humidity" type="xs:float"/>
    

    您尝试解决此问题表明您正在使用试错法,而不是实际阅读 XSD 中的构造的实际含义。这不是一个好的前进方向。您似乎对这些概念感到相当困惑,例如,架构不应包含 xsi:schemaLocation 属性。

    【讨论】:

    • 感谢您的回复。我目前正在阅读有关 XSD 的更多信息。我看了一些教程,希望能找到我需要知道的东西,但显然我没有得到足够的理解。我目前正在阅读 w3schools,但你知道任何其他好的参考资料来了解有关 XSD 的更多信息?
    • Priscilla Walmsley 和 Eric van der Vlist 都撰写了有关 XML Schema 的好书。两者都值得拥有,但如果我必须选择一个,我可能会选择 Walmsley。
    猜你喜欢
    • 2019-07-28
    • 2012-06-06
    • 2011-08-12
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多