2010-03-14 56 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