【问题标题】:Problem with XML SchemaXML 模式的问题
【发布时间】:2009-06-09 02:53:12
【问题描述】:

我想将我的键盘敲击记录在一个 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>

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

谢谢,

【问题讨论】:

    标签: c# xml schema


    【解决方案1】:

    所需的 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>
    

    【讨论】:

    • 感谢架构。如果我想基于这个模式生成一个对象,并将我的键/值设置为这些对象。它可以
       LoggingActionsType loggingAction = new LoggingActionsType(); loggingAction.Keyboard。 > 它有一个 SetValue 方法,但这不起作用。 loggingAction.Keyboard.SetValue(keyboard.ToString(), GetTimestamp()); 
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2018-08-13
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多