【问题标题】:How to make an xml look simpler and also to make it simple to retrieve values using c#?如何使 xml 看起来更简单,同时也使使用 c# 检索值变得简单?
【发布时间】:2014-01-30 02:04:36
【问题描述】:
  <reportParameterTestSettings>
     <Report uri="/standard/Project-Iteration-WorkItem-MultiFT">
       <ReportParameters>
         <name>WorkItemType</name>
         <name>CurrentUser</name>
         <name>SelectedDate</name>
         <name>TopIteration</name>
         <name>TopTeam</name>
         <name>ExecutionIteration</name>
         <name>ShowIteration</name>
         <name>SelectedExecutionIteration</name>
         <name>SelectedShowIteration</name>
         <name>ExecutionStartDate</name>
         <name>ShowEndDate</name>
         <name>Holiday</name>
         <name>JobRole</name>
         <name>EnabledFeature</name>
       </ReportParameters>
     </Report>
  </reportParameterTestSettings>

我怎样才能使这个 xml 没有多余的标签,如名称。此外,此示例仅包含一份报告。实际上会有超过 20 份报告。我正在考虑将所有参数添加为一个字符串逗号分隔,然后对其进行拆分。有没有更好的方法?

【问题讨论】:

  • 组合值然后对它们进行拆分与 XML 背后的想法背道而驰。这个 XML 没有任何问题,事实上,它已经很简单了。除了所有元素标签都应该以大写字母开头。
  • 是的,我同意。这就是为什么要以更好的方式做到这一点
  • 没有更简单的格式(这很简单),简单的节点选择和foreach循环将轻松检索值。
  • 我会使用带有name 属性的名为ReportParameter 的元素。如果您问自己,“ReportParameters 集合包含什么?”答案是“报告参数”......不是“名称”。有一天,参数可能不仅仅是名称。当然,这与您减少节点数量的愿望背道而驰,但通常 XML 应该尽可能地具有良好的结构和表现力。

标签: c# .net xml xpath


【解决方案1】:

您正在创建此文件吗?对你的要求有点困惑,但你应该能够做这样的事情

使用 XML 序列化

using System.XML.Serialization

public class reportParameterTestSettings
{
    [XmlElement("Report")]
    public List<ReportParameters> Report { get; set; }

    [XmlAttribute("Uri")]
    public string Uri { get; set; }
}

public class ReportParameters
{
    public string WorkItemType { get; set; }
    public string CurrentUser { get; set; }
    ...etc ...etc
}

将其写入 xml 文件

reportParameterTestSettings data = new reportParameterTestSettings();
//add your items to data


XmlSerializer writer = new XmlSerializer(typeof(reportParameterTestSettings));
using (FileStream file = File.Create(@"c:\file.xml"))
{
    writer.Serialize(file, data);
}

读取您的 xml 文件

reportParameterTestSettings data;

XmlSerializer reader = new XmlSerializer(typeof(reportParameterTestSettings));
using (FileStream file = File.OpenRead(@"c:\file.xml"))
{
     data = reader.Deserialize(file) as reportParameterTestSettings;
}

然后你应该得到一个看起来像这样的文件

<reportParameterTestSettings>
 <Report Uri=stuff>
   <ReportParameters>
     <WorkItemType>Stuff here</WorkItemType>
     <CurrentUser>Stuff here</CurrentUser>
       ...etc ...etc
   </ReportParameters>
 </Report>
 <Report Uri=stuff>
    <ReportParameters>
      <WorkItemType>Stuff here</WorkItemType>
      <CurrentUser>Stuff here</CurrentUser>
        ...etc ...etc
    </ReportParameters>
  </Report>
</reportParameterTestSettings>

【讨论】:

    【解决方案2】:

    newboston 社区有一些很棒的 C# xml 教程: 从本教程开始:http://thenewboston.org/watch.php?cat=15&number=109

    【讨论】:

      【解决方案3】:

      我认为您当前的结构已经足够简单了。事实上,这与在一个数据库表中有多个行非常相似。

      在查询您的 xml 方面,我建议查看 linq to xml http://msdn.microsoft.com/en-us/library/bb387061.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        相关资源
        最近更新 更多