2012-03-09 13 views
0

私は村の馬鹿になりたくありませんが、XMLへのLinqの仕組みはわかりません。私はそれがSQLクエリを書くようになっているはずですが、私はそれの周りに私の頭を包むことはできません。 XML文字列からデータを取得しようとしています。私はこれを行うためにXMLDocumentsとXPathを使用したくありません。私はそれを行うことができました、私はそれをしました、私は私のアプリケーションをもう少しsnazzyにしようとしています。私が持っているXMLは少し面倒ですが、私はそれを解析するためにXpathを使用することができました。 LinqからXMLへの変換はずっと簡単です。次のXMLから、すべての要素をそこから取り出し、それらをPOCOオブジェクトにバインドする必要があります。たとえば、Patient.PatientIdオブジェクトをPatientID name属性を持つ要素ノードのvalue属性(4563)で設定する必要があります。今、私はXmlDocumentを使用してこれを行う方法を理解することができます。しかし、私はLINQ to XMLを使ってこれをどうやって行うのか理解できません。私に何ができる?私は、私にトラブルを与えているXMLの下で何をしようとしているのかの例を持っています。LINQ to XMLを使用してXMLから値を取得する

<?xml version="1.0" encoding="utf-8"?> 
<dataTemplateSpecification id="id1" name="name1" > 
    <templates xmlns=""> 
    <template> 
     <elements> 
     <element id="element0" name="PatientId" display="Patient ID" dataType="String" visable="true" readOnly="false" value="4563"> 
      <mapping path="//Template/TemplateData/ACOData/PATIENT_ID" /> 
      <validation> 
      <rules> 
       <rule id="r0" test="#element0.value == ''"> 
       <fail> 
        <html> 
        <b>Patient ID is null, value must be present</b> 
        </html> 
       </fail> 
       </rule> 
      </rules> 
      </validation> 
     </element> 
     <element id="element1" name="PopulationPatientID" display="Population Patient ID" dataType="String" visable="true" readOnly="true" enc="2098" value="6407"> 
      <mapping path="//Template/TemplateData/ACOData/POPULATION_PATIENT_ID" /> 
      <!--Patient/compositeID[./idType='populationPatientID']/id--> 
      <validation> 
      <rules> 
       <rule id="r1" test="#element1.value == ''"> 
       <fail> 
        <html> 
        <b>EMPI ID is null, value must be present</b> 
        </html> 
       </fail> 
       </rule> 
      </rules> 
      </validation> 
     </element> 

ここでもまた、私が使用しようとしているLINQ to XMLがあります。

TemplateModel template = (TemplateModel)(from templates in elem.XPathSelectElements("//templates/template") 
select new PatientACOData 
{ 
     PatientId = templates.Elements("//element/element[@name='PatientId']").Attributes("value").Value; 

}); 

UPDATE >>>上の例クラス定義がわずかになった)SIMPLE ...ここでは、適切なクラス定義がある...

class PatientClass 
{ 
    public int Item_ID { get; set; } 
    public int PatientId { get; set; } 
    public int EMPIID { get; set; } 
    //public int PopulationPatientID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public string Phone { get; set; } 
    public string HostpitalFinNumber { get; set; } 
    public DateTime AdminDate { get; set; } 
    public string MRNType { get; set; } 
    public string MRN { get; set; } 
    public string PatientRoomPhone { get; set; } 
    public DateTime DischargeDateTime { get; set; } 
    public string DischargeDisposition { get; set; } 
    public string DischargeTo { get; set; } 
    public char DischargeAdvocateCall { get; set; } 
    public string Payor { get; set; } 
    public char HomeHealthCareAccepted { get; set; } 
    public char SafeLandingAccepted { get; set; } 
    public string PCPName { get; set; } 
    public string PCPPhone { get; set; } 
    public string SpecialistName { get; set; } 
    public string SpecialistPhone { get; set; } 
    public DateTime PCPAppointmentDateTime { get; set; } 
    public string PCPAppointmentLocation { get; set; } 
    public DateTime SpecialistAppointmentDateTime { get; set; } 
    public string SpecialistAppointmentLocation { get; set; } 
    public char CompletedPathway { get; set; } 
    public string CompletedPathwayReason { get; set; } 
    public string Comment { get; set; } 
} 
+0

これはまだ実際のですか?どの出力を期待していますか? – sll

+0

あなたは何を意味するのか分かりません。私はそのXMLからデータオブジェクトにデータを引き出そうとしています。私はいくつかの異なる方法を試していますが、私にとってのハードルはXMLへのlinqの学習です – SoftwareSavant

+0

"データオブジェクト"クラス定義を共有してください – sll

答えて

1

あなたのXMLをよると、以下のように私はPatientClassを記入します。

var xml = XElement.Load("XMLFile1.xml"); 

var patients = from template in xml.Element("templates").Elements("template") 
       select new PatientClass 
       { 
        PatientId = (from element in template.Element("elements").Elements("element") 
           where element.Attribute("name").Value == "PatientId" 
           select (int)element.Attribute("value")).FirstOrDefault() 

       }; 
関連する問題