XMLElement - 覆盖输出格式

时间:2012-02-12 00:47:09

标签: c# xml vb.net

我需要使用自定义XmlElement覆盖哪种方法来按特定顺序格式化主体?<​​/ p>

目前,当实例化类时,我让它从DefaultValueAttribute自动填充默认值,并通过构造函数创建初始子元素。

我想要做的是确保Elements子节点按特定顺序排列。这不是Web服务Xml转换,而是用户界面的简单文件输出。

我尝试重写InnerXml,但那是一个半身像。如果我不从构造函数创建初始子元素,那么它们永远不会出现。

更新

样本无序输出:

<ElementType name="RGB">
  <superType type="Class" />
  <element name="Alpha" type="int">
    <default>255</default>
  </element>
  <element name="R" type="int">
    <default>0</default>
  </element>
  <element name="G" type="int">
    <default>0</default>
  </element>
  <element name="B" type="int">
    <default>0</default>
  </element>
</ElementType>

样品有序输出:

<ElementType name="RGB">
  <superType type="Class" />
  <element name="R" type="int">
      <default>0</default>
  </element>
  <element name="G" type="int">
      <default>0</default>
  </element>
  <element name="B" type="int">
      <default>0</default>
  </element>
  <element name="Alpha" type="int">
    <default>255</default>
  </element>
</ElementType>

实际输出不是XSLT格式,但这应该是我想要的格式。目前,最后编辑的是底部,我想让各种对象属性在父节点的ChildNodes中按特定顺序输出。我希望将迭代过载降至最低。我宁愿处理将类输出处理成XML格式的子节点创建。

1 个答案:

答案 0 :(得分:0)

在查看我的编码错误后,发现我错误地覆盖了OuterXML属性。

这是另一个类的结果实现,但对我的问题是相同的答案。

public override string OuterXml {
  get {
    this.AppendChild( this.Location );
    this.AppendChild( this.Size );
    this.AppendChild( this.Hotspot );
    foreach( RGB shad in this.Shading ) {
      this.AppendChild( shad );
    }
    foreach( RGB spec in this.Specular ) {
      this.AppendChild( spec );
    }
    return base.OuterXml;
  }

更新

对此解决方案的唯一警告是,即使我覆盖了第二级子元素中的OuterXml,也不会在OuterXml中表示第二级子元素。

问题#2

我需要覆盖哪些方法,以便OuterXml捕获n层级的子元素/对象?