получение значений из XML с использованием LINQ to XML - PullRequest
0 голосов
/ 10 марта 2012

Я ненавижу быть деревенским идиотом, но понятия не имею, как работает Linq to XML. Я знаю, что это должно быть похоже на написание SQL-запроса, но я просто не могу обдумать это. Я пытаюсь получить данные из строки XML. Я не хочу использовать XMLDocuments и XPath для этого. Я мог бы сделать это, я сделал это, я пытаюсь сделать свое приложение более притягательным. XML, который у меня есть, немного обременителен, но я смог использовать Xpath для его анализа. Предполагается, что Linq to XML будет намного проще. Из следующего XML мне нужно получить все элементы и связать их с объектом POCO. Например, мне нужно установить объект Patient.PatientId с атрибутом value (4563) узла элемента с атрибутом имени PatientID. Теперь я мог понять, как это сделать, используя XmlDocument. Но я не могу понять, как это сделать с помощью 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>

Опять же, вот ссылка на XML, которую я пытаюсь использовать.

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

});

ОБНОВЛЕНИЕ >>> ОПРЕДЕЛЕНИЕ ВЫШЕ ПРИМЕРНОГО КЛАССА БЫЛО ПРОСТО ПРОСТО ... Вот соответствующее определение класса ...

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; }
}

1 Ответ

1 голос
/ 31 марта 2012

В соответствии с вашим 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()

                };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...