【问题标题】:Reading Xml into DataSet将 Xml 读入 DataSet
【发布时间】:2009-04-15 09:15:58
【问题描述】:

这是我的 XML 文件:

<?xml version="1.0" standalone="no" ?> 
<!-- This file represents The Details of the user and the responces: --> 
<Survey>
  <Clientdetails>
    <ClientName xmlns="yash" /> 
    <ClientCompanyName xmlns="lnt" /> 
    <ClientTelNo. xmlns="546" /> 
    <ClientMobileNo xmlns="56" /> 
    <ClientEMail xmlns="56" /> 
  </Clientdetails>
  <ClientResponces>
    <Question1>
      <responce>1</responce> 
    </Question1>
    <Question2>
      <responce>2</responce> 
    </Question2>
    <Question3>
      <responce>3</responce> 
    </Question3>
    <Question4>
      <responce>3</responce> 
    </Question4>
    <Question5>
      <Question5.1>
        <responce>3</responce> 
      </Question5.1>
      <Question5.2>
        <responce>3</responce> 
      </Question5.2>
      <Question5.3>
        <responce>2</responce> 
      </Question5.3>
      <Question5.4>
        <responce>3</responce> 
      </Question5.4>
      <Question5.5>
        <responce>3</responce> 
      </Question5.5>
      <Question5.6>
        <responce>3</responce> 
      </Question5.6>
      <Question5.7>
        <responce>3</responce> 
      </Question5.7>
      <Question5.8>
        <responce>2</responce> 
      </Question5.8>
      <Question5.9>
        <responce>1</responce> 
      </Question5.9>
      <Question5.10>
        <responce>2</responce> 
      </Question5.10>
      <Question5.11>
        <responce>0</responce> 
      </Question5.11>
      <Question5.12>
        <responce>0</responce> 
      </Question5.12>
      <Question5.13>
        <responce>0</responce> 
      </Question5.13>
      <Question5.14>
        <responce>0</responce> 
      </Question5.14>
      <Question5.15>
        <responce>0</responce> 
      </Question5.15>
      <Question5.16>
        <responce>0</responce> 
      </Question5.16>
      <Question5.17>
        <responce>0</responce> 
      </Question5.17>
    </Question5>
  </ClientResponces>
</Survey>

我想将这些数据读入 DataSet。我只想要客户给出的回答,对于第 5 个问题,我想要其 17 个子问题的平均值。

例如,DataSet 应该只包含以下内容:

1
2
3
3
4

如何在 C# 中做到这一点?

【问题讨论】:

  • 嗯??你的问题是什么?您只需打开 xml 文件并插入数据即可。
  • 编辑问题以正确显示 XML。
  • 向我们展示您的尝试并提出具体问题。我将此标记为家庭作业,直到我看到一些努力。
  • @Cerebrus:我不确定初步标记是否有用。当您看到一些努力时,您将删除标签,此时这将成为一个 wiki,并且没有人可以再获得代表了。这是两个无用且可避免的编辑,因为您有怀疑。不太好。
  • @Tomalak:你能解释一下为什么如果标签被删除,这会变成一个维基吗?提前致谢。

标签: c# xml dataset


【解决方案1】:

那个 xml 很……可怕。我的第一个建议是通过 xslt 转换运行它以使其更正常,可以加载 Load。目前,它正在可怕地滥用命名空间。

或者,忘记DataSet,并使用XmlDocument 或类似名称解析它。

这是一种使用 XmlDocument 的方法(并且使用 LINQ 只是为了平均,以节省几行代码):

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlElement el in doc.SelectNodes("//responce")) {
    Console.WriteLine(el.ParentNode.Name + "=" + el.InnerText);
}
XmlNodeList fiveAnswers = doc.SelectNodes(
      "/Survey/ClientResponces/Question5/*/responce");
double avg = fiveAnswers.Cast<XmlElement>()
     .Average(el => int.Parse(el.InnerText));
Console.WriteLine(avg);

例如普通 xml:

<question num="1">
  <response>1</response>
</question>
...
<question num="5">
  <response num="1">1</response>
  <response num="2">3</response>
  ...
</question>

或类似的东西。不要使用元素名称来推断身份。

【讨论】:

  • -1。他无法将 XML 加载到数据集中,而您建议使用 XSLT?是的,正确,但有帮助吗?
  • 不确定是否应该包含一个可以包含重复值的“id”属性。
  • @Marc Gravell:非常感谢。 :-)(我知道只要没有定义其他内容(DTD/schema),名为“id”的属性在 XML 中就没有特殊含义。)
【解决方案2】:

试试

 XmlDataDocument doc = new XmlDataDocument();
doc.LoadXml(<your string>);
DataSet ds = doc.DataSet;

然后您可以使用 LINQ 从文档中进行选择。

更新

 foreach (XmlNode node in doc.SelectNodes("\\Survey\ClientResponses"))
  {
     string text = node.InnerText;
  }

(未测试!您的嵌套案例会很棘手!)

【讨论】:

  • 请回复您的评论 - 他无法将 那个 xml 加载到数据集中,因为它太可怕了,太无聊了。
  • 没错...有点乱。
猜你喜欢
  • 2010-09-08
  • 2013-01-02
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多