【问题标题】:Find an annotation for an xml element in its associated schema-defined type在关联的模式定义类型中查找 xml 元素的注释
【发布时间】:2011-03-19 15:53:39
【问题描述】:

我有一个 xml 类型,USAddress,在架构中定义:

<xsd:element name="MyUSAddress" type="USAddress"/>
<xsd:complexType name="USAddress">
  <xsd:sequence>
    <xsd:element name="name"   type="xsd:string"/>
    <xsd:element name="street" type="xsd:string">
      <xsd:annotation>
        <xsd:appinfo>Special Metadata</xsd:appinfo>
      </xsd:annotation>
    </xsd:element>
    <xsd:element name="city"   type="xsd:string"/>
    <xsd:element name="state"  type="xsd:string">
      <xsd:annotation>
        <xsd:appinfo>Special Metadata</xsd:appinfo>
      </xsd:annotation>
    </xsd:element>
    <xsd:element name="zip"    type="xsd:decimal"/>
  </xsd:sequence>
</xsd:complexType>

以及数据实例文档中的一个 XML 元素:

<MyUSAddress>
   <name>Robert Smith</name>
   <street>8 Oak Avenue</street>
   <city>Old Town</city>
   <state>PA</state>
   <zip>95819</zip>
</MyUSAddress>

此架构和实例数据在编译时是未知的,因此所有分析都是动态完成的。此模式的简单性仅用于示例目的。真正的模式会更复杂。

假设我已将架构加载到 System.Xml.Schema.XmlSchema 中,当我访问实例 xml 文档中的每个节点时,如何获取关联的架构元素并读取其 appinfo 注释?

【问题讨论】:

    标签: c# .net xml xsd


    【解决方案1】:

    在节点处使用XMLReader.SchemaInfo property。然后查看 SchemaType.Annotation.Items。

    请注意,您的元素/注释嵌套不太正确,但我认为这只是简化的无意副作用。

    【讨论】:

    • 我还是有问题。假设我在节点 &lt;street&gt;8 Oak Avenue&lt;/street&gt; 上,reader.SchemaInfo.SchemaType.Annotation 即将为空。在调试器可视化器中,我正在搜索 XMLSchema(在我的例子中为 XMLSchemaSet)和 XMLReader 的对象树,但没有找到任何非空注释字段。
    • 啊,是的,在这种情况下我只需要reader.SchemaInfo.SchemaElement.Annotation。我不知道为什么我以前没有找到它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2016-04-04
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多