【问题标题】:Can I make my XML Schema (XSD) give me VS Intellisense with elements that have *any* name?我可以让我的 XML Schema (XSD) 给我 VS Intellisense 与具有 *any* 名称的元素吗?
【发布时间】:2011-06-17 07:01:38
【问题描述】:

以下是示例 XSD 和示例 XML。 XSD 是为 XML 编写的,如下所示:

<Columns>
    <Column label="etc..."></Column>
</Columns>

我希望 XSD 允许使用任何名称的元素,而不仅仅是“列”。我真正想要的是在 Visual Studio 中工作的智能感知,这样我就可以输入任何元素名称而不是“列”,并且仍然会提示输入各种列属性。这可能吗?我只是在寻找智能感知。我不需要使用架构来实际验证 XML。

示例 XML:

<?xml version="1.0" encoding="utf-8" ?>
<Columns name="FindPatient" label="Find Patient">
    <Name label="Patient Name" display="yes" order="1"/>
    <MRN label="MRN #" display="yes" order="2"/>
    <BirthDate label="Birth Date" format="shortdate" align="right" display="yes" order="3"/>
    <SSN label="SSN" format="hiddenSsn" display="yes" order="4" notSortable="yes"/>
    <DateOfService label="Date Of Service" format="shortdate" align="right" display="no" order="5"/>
    <AdmitDate label="Admit Date" format="shortdate" align="right" display="no" order="6"/>
    <DischargeDate label="Discharge Date" format="shortdate" align="right" display="no" order="7"/>
    <Address label="Address" display="yes" order="8"/>
    <Facility label="Facility" display="yes" order="9"/>
</Columns>

XSD 示例:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ColumnConfiguration" targetNamespace="http://example.com/columnconfiguration" xmlns="http://example.com/columnconfiguration" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="yesNo">
        <xs:restriction base="xs:string">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="Column">
        <xs:attribute name="label" type="xs:string" use="required"/>
        <xs:attribute name="display" type="yesNo" use="required"/>
        <xs:attribute name="order" type="xs:integer" use="required"/>
        <xs:attribute name="format" type="format" use="optional"/>
        <xs:attribute name="align" type="xs:string" use="optional"/>
        <xs:attribute name="tooltip" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="Columns">
        <xs:sequence>
            <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Columns" type="Columns"/>
</xs:schema>

【问题讨论】:

    标签: xml visual-studio xsd intellisense


    【解决方案1】:

    替换

    <xs:complexType name="Columns">
        <xs:sequence>
            <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    

    解决方案:允许任何子元素而不指定它们

    <xs:complexType name="Columns">
        <xs:sequence>
            <xs:any minOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    

    解决方案 2:允许一些定义明确的孩子

    <xs:complexType name="Columns">
        <xs:choice minOccurs="1" maxOccurs="unbound">
            <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
            <!-- add other xs:element here -->
        </xs:choice>
    </xs:complexType>
    

    【讨论】:

    • 第一个解决方案让我输入任何元素名称,但没有给我任何属性的智能感知。如果我先将元素命名为“列”,然后再更改它,则第二个确实有效。我认为没有任何完美的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2018-12-13
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多