C# 如何合并和格式化XML

C# 如何合并和格式化XML,c#,C#,我有一个与此类似的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>ALBUTERO

我有一个与此类似的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>

20%脂肪乳剂250毫升袋
醋氨酚注射液1000 MG/100 ML小瓶
人白蛋白,5%12.5 G/250 ML小瓶
硫酸沙丁胺醇(90 MCG/INH)60口吸入器
氨茶碱注射液250mg/10mL AMP
麻醉工具包1个杂项
硫酸阿托品注射液[ATRSG]1MG/10ML 1MG糖浆
硫酸阿托品注射液0.4mg/1ml小瓶
苯佐卡因60毫升喷雾剂
0.25%布比卡因注射液30ml小瓶
布比卡因葡萄糖注射液2mL AMP
0.9%NA CL IV[NS1000]1000毫升袋
0.9%氯化钠50毫升小瓶
20%脂肪乳剂250毫升袋
醋氨酚325毫克标签
对乙酰氨基酚溶液650MG/20.3ML 650 MG杯
醋氨酚栓剂650 MG补充
对乙酰氨基酚/可待因300 MG/30 MG 1片
硫酸沙丁胺醇注射液(2.5 MG/3 ML)2.5 MG安瓿-NEB
硫酸阿托品注射液[ATRSG]1MG/10ML 1MG糖浆
AVITENE 5克罐头
BICITRA口服溶液30毫升杯
比沙考地尔栓剂10 MG补充
酒石酸布托啡诺1 MG/ML 1 ML小瓶
酒石酸布托啡诺2 MG/ML 1 ML小瓶
葡萄糖酸钙注射液[CG]1克/10毫升10毫升
卡前列素特罗(血酸盐)250微克/毫升1毫升安培
头孢唑林钠注射液(CEF1)1克小瓶
克林霉素磷酸酯/D5W 900MG/50ML背驮
硫酸可待因15mg片剂
磷酸地塞米松[DECSG]4 MG/ML 1 ML小瓶
地西泮注射液10mg/2ml 10mg糖浆
苯海拉明50毫克/毫升50毫克小瓶
DOCUSATE钠100mg帽
硫酸麻黄碱注射液50 MG AMP
肾上腺素1:1000注射*PF*1mg/1ml安瓿
0.9%NA CL IV[NS1000]1000毫升袋
0.9%氯化钠50毫升小瓶
20%脂肪乳剂250毫升袋
我试图做的是读取XML中的值,并将单位与药物合并在一起也位于ICU和NICU。当用户在其中键入med时,它将能够告诉他们med的位置。我有一个可行的实现,但缺点是它非常慢。所以我的问题是我可以做什么类型的算法或排序来提高性能。我尝试使用linq(最终我得到了一个内存不足的例外),使用字典被认为太慢了。我愿意接受任何想法或建议。这个列表有大约50个站点,每个单元有80-100种药物


编辑:这是一个WPF应用程序(C#)。xml不在我的掌握之中,因为这是API提供的,所以我无法更改它。

将xml加载到
XDocument
中,并使用LINQ to 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");

为了获得性能,您必须避免每次用户查询应用程序时都解析xml文件。您还应该澄清您的问题。它是web、winform还是wpf应用程序?xml文件是如何生成的?更新的频率是多少?您还应该发布示例代码您是否查看了Linq To xml以将集合读入内存并简单地查询im内存集合ie:填充IDictionary,其中键是med,ILIst是med所在的单元。