2010-03-14 52 views
1

这里的问题:我的输入是XML文件看起来像:如何使用这种结构(在.net中)从XML创建XSD模式?

<BaseEntityClassInfo> 
<item> 
    <key>BaseEntityClassInfo.SomeField</key> 
    <value>valueData1</value> 
</item> 
<item> 
    <key>BaseEntityClassInfo.AdditionalDataClass.SomeOtherField</key> 
    <value>valueData2</value> 
</item> 
<item> 
    <key>BaseEntityClassInfo.AdditionalDataClass.AnotherClassInfo.DisplayedText</key> 
    <value>valueData3</value> 
</item> 
... 
... 
</BaseEntityClassInfo> 

<key>元素莫名其妙地描述实体类领域和关系(在我没有接触到一些其他应用程序使用)和<value>存储我需要的实际数据。

我的目标是以编程方式从这个XML中生成一个类型化的数据集,然后可以用它来创建报告。我想先从输入XML文件构建一些XSD模式,然后使用这个模式来生成数据集,但我不知道该怎么做。问题是我不想要一个表中的所有数据,我需要几个表,其关系基于<key>值,所以我想我需要以某种方式从XML <key>数据推断关系结构。有其他方法吗?我应该使用XSLT,Linq2XML还有其他的东西吗?

那么你怎么看?这怎么能做到,最好的办法是什么?
任何意见,想法,建议将真的赞赏!
有人吗?有一些额外的信息在下面的评论...

+0

您正在使用哪个版本的.NET? – Pretzel 2010-03-19 12:30:49

+0

我正在使用.net 3.5 – Rockcoder 2010-03-19 14:22:31

+0

呃。为什么在这个世界中,这个作者决定在XML **中实现实体 - 属性 - 值**? XML主要是为了消除这种混乱。 – Aaronaught 2010-03-23 01:27:59

回答

1

不幸的是,你不会真的能够使用任何XML工具来建立你的数据集,因为你需要的数据不是以XML格式存储的:它存储在格式“其他一些应用程序”正在使用。如果它看起来像:

<BaseEntityClassInfo SomeField="valueData1"> 
    <AdditionalDataClass SomeOtherField="valueData2"> 
    <AnotherClassInfo DisplayedText="valueData3"> 
    </AdditionalDataClass> 
</BaseEntityClassInfo> 

然后,你可以使用.NET中的标准的XML处理程序,但因为它不是,你能做的最好是拉键和值出成对的字符串,然后写你自己代码将密钥解析为您需要的数据实体(例如,按时间段分割密钥,然后递归匹配或创建数据结构)。

+1

“与DataSet生成的默认XML不匹配”与“不是XML格式的数据”之间存在相当大的差距。 – 2010-03-23 01:08:09

1

没有看到您所有的数据我不得不猜测,但它看起来像XML可以基于一类结构,如:

using System; 

[Serializable] 
public class BaseEntityClassInfo 
{ 
    public string SomeField {get; set;} 
    public AdditionalDataClass _AdditionalDataClass {get; set;} 

    public class AdditionalDataClass 
    { 
    public string SomeOtherField {get; set;} 
    public AnotherClassInfo _AnotherClassInfo {get; set;}  
    } 

    public class AnotherClassInfo 
    { 
    public string DisplayedText {get; set;} 
    } 

    public BaseEntityClassInfo BaseEntityClassInfoCreate() 
    { 
     BaseEntityClassInfo instance = 
      new AdditionalDataClass 
      { 
       SomeField = "valueData1", 
       _AdditionalDataClass = 
        new AdditionalDataClass 
         { 
          SomeOtherField = "ValueData2", 
          _AnotherClassInfo = 
           new AnotherClassInfo { DisplayedText = "valueData3" } 
         } 
      }; 
     return instance; 
    } 

} 

...那类结构,然后序列化为XML。

这种结构可以与你的真实数据进行扩展,如果你最终说

List<BaseEntityClassInfo> 

这可能是你的数据集的数据源。

+0

你是对的类结构,但我需要的是以某种方式从这个混乱构造xsd模式不只是填充数据集的数据.... – Rockcoder 2010-03-23 19:31:07