2012-07-14 64 views
0

我有一個類似於此如何鞏固和格式化XML

<Unit Name="ANES"> 
    <med>20% FAT EMULSION 250 ML BAG</med> 
    <med>ACETAMINOPHEN INJ 1000 MG/ 100 ML VIAL</med> 
    <med>ALBUMIN HUMAN, 5% 12.5 G/250 250 ML VIAL</med> 
    <med>ALBUTEROL SULFATE (90 MCG/INH) 60 PUFF INHALER</med> 
    <med>AMINOPHYLLINE INJ 250 MG/10 10 ML AMP</med> 
    <med>ANESTHESIA KIT 1 EA MISC</med> 
    <med>ATROPINE SULFATE INJ [ATRSG] 1MG/10ML 1 MG SYRG</med> 
    <med>ATROPINE SULFATE INJ 0.4 MG/1 M 1 ML VIAL</med> 
    <med>BENZOCAINE 60 ML SPRAY</med> 
    <med>BUPIVACAINE 0.25% INJ 30 ML VIAL</med> 
    <med>BUPIVACAINE IN DEXTROSE INJ 2 ML AMP</med> 
</Unit> 


<Unit Name="ICU"> 
    <med>0.9% NA CL IV [NS1000] 1000 ML BAG</med> 
    <med>0.9% NACL 50 ML VIAL</med> 
    <med>20% FAT EMULSION 250 ML BAG</med> 
    <med>ACETAMINOPHEN 325 MG TAB</med> 
    <med>ACETAMINOPHEN SOLUTION 650MG/20.3ML 650 MG CUP</med> 
    <med>ACETAMINOPHEN SUPPOSITORY 650 MG SUPP</med> 
    <med>ACETAMINOPHEN/CODEINE 300 MG/30 MG 1 TAB </med> 
    <med>ALBUTEROL SULFATE INH SOLN (2.5 MG/3 ML) 2.5 MG AMPUL-NEB</med> 
    <med>ATROPINE SULFATE INJ [ATRSG] 1MG/10ML 1 MG SYRG</med> 
    <med>AVITENE 5 G CAN</med> 
    <med>BICITRA ORAL SOLN 30 ML CUP</med> 
    <med>BISACODYL SUPPOSITORY 10 MG SUPP</med> 
    <med>BUTORPHANOL TARTRATE 1 MG/ML 1 ML VIAL</med> 
    <med>BUTORPHANOL TARTRATE 2 MG/ML 1 ML VIAL</med> 
    <med>CALCIUM GLUCONATE INJ[CG] 1 GM/10ML 10 ML 10MLVIAL</med> 
    <med>CARBOPROST TRO (HEMABATE) 250 MCG/ML 1 ML AMP</med> 
    <med>CEFAZOLIN SODIUM INJ (CEF1] 1 G VIAL</med> 
    <med>CLINDAMYCIN PHOSPHATE/D5W 900MG/50ML PIGGYBACK</med> 
    <med>CODEINE SULFATE 15 MG TAB</med> 
    <med>DEXAMETHASONE PHOSPHATE [DECSG] 4 MG/ML 1 ML VIAL</med> 
    <med>DIAZEPAM INJ 10 MG/2 ML 10 MG SYRIN</med> 
    <med>DIPHENHYDRAMINE 50 MG/ML 50 MG VIAL</med> 
    <med>DOCUSATE SODIUM 100 MG CAP</med> 
    <med>EPHEDRINE SULFATE INJ 50 MG AMP</med> 


     <med>EPINEPHRINE 1:1000 INJ *PF* 1 MG/ 1 ML AMPULE</med> 
    </Unit> 
<Unit Name="NICU"> 
     <med>0.9% NA CL IV [NS1000] 1000 ML BAG</med> 
     <med>0.9% NACL 50 ML VIAL</med> 
     <med>20% FAT EMULSION 250 ML BAG</med> 
</Unit> 

我所試圖做的是閱讀的XML值,並鞏固toghther用藥物單位的XML。例如ANES(20%FAT EMULSION 250毫升袋)也位於ICU和NICU。當用戶輸入藥物時,可以告訴他們藥物的位置。我有一個工作實施,但缺點是它非常慢。所以我的問題是我可以做什麼類型的算法或排序來提高性能。我曾嘗試使用LINQ(最終我得到一個內存異常),使用字典被認爲太慢了。我願意接受任何想法或建議。該名單有大約50個電臺,每個單位有80-100個電臺。

編輯:這是一個WPF應用程序(C#)。 xml不在我的手中,因爲這是API提供的,所以我不能改變它。

+0

爲了提高性能,你必須避免用戶每次被quering應用解析XML文件。你也應該澄清你的問題。它是一個網絡,winform或wpf應用程序? xml文件是如何生成的?多久更新一次? – 2012-07-14 06:08:36

+0

您還應該發佈示例代碼 – jle 2012-07-14 06:17:48

+0

您是否查看了Linq to Xml以將集合讀入內存並簡單地查詢im-memory集合,即:填充IDictionary <字符串,其中鍵是med,ILIst 是Medis的單位。 – Lloyd 2012-07-14 06:32:54

回答

2

載入你的XML轉換XDocument和使用LINQ到XML來查詢數據:

var doc = XDocument.Parse("your XML here"); 

var units = from u in doc.Elements("Unit") 
      where u.Elements("med").Any(m => (string)m == "med you're looking for") 
      select (string)u.Attribute("Name");