XML Schema的问题

时间:2009-06-08 18:14:37

标签: c# xml schema

我想在xml文件中记录我的键盘笔划。属性可以是键,值可以是时间戳或其他方式(无关紧要)。我想以我的模式输出完全如下的方式编写模式:

<LoggingActions>
  <Keyboad>
       <Entry key="a">0</Entry>
       <Entry key="b">1213</Entry>
       <Entry key="c">3445</Entry>
  </Keyboad>
</LoggingActions>

到目前为止,这是我的架构:

<xs:element name="MyEvents">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="LoggingActions"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="KeyboardEvent">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="MyKeyEntry"/>
      <xs:element ref="Time"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="MyKeyEntry">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="unbounded"  ref="keyReference"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="Time">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="unbounded"  ref="timeRef"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="keyReference" type="xs:string"/>
<xs:element name="timeRef" type="xs:int"/>

相反,我将这个xml作为我的输出:

<LoggingActionsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<LoggedKey>
    <MyKeyEntry>a</MyKeyEntry> 
    <MyKeyEntry>b</MyKeyEntry> 
    <MyKeyEntry>c</MyKeyEntry> 
  </LoggedKey>

  <Time>
    <timeRef>0</timeRef> 
    <timeRef>1213</timeRef> 
    <timeRef>3445</timeRef> 
  </Time>
  </LoggingActions>

如何将这两者结合在一起?

谢谢,

1 个答案:

答案 0 :(得分:2)

所需的XML格式不正确,您的“条目”备注应该有一些属性,可能类似于'value =“a”'而不仅仅是'=“a”',尽管它很容易推断你的意图。

<LoggingActions>
   <Keyboard>
     <Entry value="a">0</Entry>
     <Entry value="b">1213</Entry>
     <Entry value="c">3445</Entry>
   </Keyboard>
</LoggingActions>

子序列模式如下所示:

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="LoggingActions" type="LoggingActionsType" />
  <xsd:complexType name="LoggingActionsType">
    <xsd:sequence>
      <xsd:element name="Keyboard" type="KeyboardType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="KeyboardType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="Entry" type="EntryType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="EntryType">
    <xsd:attribute name="value" type="xsd:string" />
  </xsd:complexType>
</xsd:schema>