2014-12-13 4 views
0

Я получаю значения во многих файлах XML, используя приведенную ниже строку кода. Тем не менее, я заметил, что некоторые из файлов XML не содержат элементов «DateOfBirth», которые выбрасывают значение, не могут быть нулевыми. Есть ли способ игнорировать элемент и назначить пустое значение, если элемент отсутствует в XML-файле? Поскольку вы можете видеть, что у меня есть цикл, я добавляю эту запись в сетку. Если элемент DateOfBirth отсутствует, он будет игнорировать эту запись и не добавлять ее в DataSet. Я хочу, чтобы он все еще добавлял имя FirstName и LastName и оставлял DOB пустым.Игнорировать отсутствующий элемент XML

foreach (object o in listBox2.Items) 
    { 
     DataSet objDataSet = new DataSet(); 

     objDataSet.ReadXml(folder + "\\" + o.ToString(), XmlReadMode.InferSchema); 
     try 
     { 
      List<object> firstNames = objDataSet.Tables["FirstName"].AsEnumerable().Select(r => r["Part"]).ToList(); 
      List<object> lastNames = objDataSet.Tables["LastName"].AsEnumerable().Select(r => r["Part"]).ToList(); 
      List<object> dob = objDataSet.Tables["DateOfBirth"].AsEnumerable().Select(r => r["FullDate"]).ToList(); 

Добавление XML:

 <OmdCds xmlns="cds" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:cdsd="cds_dt" 
    xsi:schemaLocation="cds ontariomd_cds.xsd"> 
    <PatientRecord> 
    <Demographics> 
    <Names> 
     <cdsd:LegalName namePurpose="L"> 
     <cdsd:FirstName> 
     <cdsd:Part>SARAH</cdsd:Part> 
     <cdsd:PartType>GIV</cdsd:PartType> 
     <cdsd:PartQualifier>BR</cdsd:PartQualifier> 
     </cdsd:FirstName> 
     <cdsd:LastName> 
     <cdsd:Part>GOMEZ</cdsd:Part> 
     <cdsd:PartType>FAMC</cdsd:PartType> 
     <cdsd:PartQualifier>BR</cdsd:PartQualifier> 
     </cdsd:LastName> 
     <cdsd:OtherName> 
     <cdsd:Part>GABRIELA</cdsd:Part> 
     <cdsd:PartType>GIV</cdsd:PartType> 
     <cdsd:PartQualifier>BR</PartQualifier> 
     </cdsd:LastName> 
    </cdsd:LegalName> 
    </Names> 
    <DateOfBirth> 
     <cdsd:FullDate>1950-03-26</cdsd:FullDate> 
    </DateOfBirth> 
+1

получить это значение сначала и проверить, является ли это 'string.nullOrEmpty'? – CularBytes

+0

Кроме того, у вас есть _table_ с именем 'FirstName'? Это странный формат XML. –

+0

Кроме того, возможно, вам лучше манипулировать XML напрямую, а не играть с помощью DataSet. –

ответ

0

я решить вышеупомянутую проблему самостоятельно. Я создаю метод bool для проверки наличия или отсутствия элемента. Основываясь на true или false, я либо игнорирую, чтобы получить значение для элементов.

public bool IsNodeExist(string fileName) 
    { 
     bool bState = false; 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(fileName); 
     //Select the node with the matching attribute value. 
     XmlNode nodeToFind; 
     XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable); 

     namespaceManager.AddNamespace("cdsd", "cds_dt"); 
     namespaceManager.AddNamespace("cds", "cds"); 
     nodeToFind =  doc.DocumentElement.SelectSingleNode("./cds:PatientRecord/cds:Demographics/cds:DateOfBirth", namespaceManager); 

     if (nodeToFind == null) 
     { 
      bState = true; 
     } 
     return bState; 
    } 
Смежные вопросы