2014-02-17 2 views
0

У меня есть xml-файл с вложенными элементами. Мне нужно загрузить файл xml и сохранить значения конкретных дочерних элементов в базе данных sql.Как получить значения дочерних элементов родительского узла xml в C# asp.net (без использования linq)

XML файл:

<section id="A00-A09"> 
      <desc>Intestinal infectious diseases (A00-A09)</desc> 
      <diag> 
      <name>A00</name> 
      <desc>Cholera</desc> 
      <diag> 
       <name>A00.0</name> 
       <desc>Cholera due to Vibrio cholerae 01, biovar cholerae</desc> 
       <inclusionTerm> 
       <note>Classical cholera</note> 
       </inclusionTerm> 
      </diag> 
      <diag> 
       <name>A00.1</name> 
       <desc>Cholera due to Vibrio cholerae 01, biovar eltor</desc> 
       <inclusionTerm> 
       <note>Cholera eltor</note> 
       </inclusionTerm> 
      </diag> 
      <diag> 
       <name>A00.9</name> 
       <desc>Cholera, unspecified</desc> 
      </diag> 
      </diag> 
    </section> 
    <section id="A15-A19"> 
      <desc>Tuberculosis (A15-A19)</desc> 
      <includes> 
      <note>infections due to Mycobacterium tuberculosis and Mycobacterium bovis</note> 
      </includes> 
     <diag> 
      <name>A15</name> 
      <desc>Respiratory tuberculosis</desc> 
      <diag> 
       <name>A15.0</name> 
       <desc>Tuberculosis of lung</desc> 
       <inclusionTerm> 
       <note>Tuberculous bronchiectasis</note> 
       <note>Tuberculous fibrosis of lung</note> 
       <note>Tuberculous pneumonia</note> 
       <note>Tuberculous pneumothorax</note> 
       </inclusionTerm> 
      </diag> 
      <diag> 
       <name>A15.4</name> 
       <desc>Tuberculosis of intrathoracic lymph nodes</desc> 
       <inclusionTerm> 
       <note>Tuberculosis of hilar lymph nodes</note> 
       <note>Tuberculosis of mediastinal lymph nodes</note> 
       <note>Tuberculosis of tracheobronchial lymph nodes</note> 
       </inclusionTerm> 
       <excludes1> 
       <note>tuberculosis s`enter code here`pecified as primary (A15.7)</note> 
       </excludes1> 
      </diag> 
    </diag> 
    </section> 

Я загрузил XML, но не в состоянии получить значения из дочерних элементов, поскольку он оказывает такое же имя тега. Есть ли какой-либо один может помочь мне решить эту проблему

+0

любая конкретная причина, по которой вы хотите сделать это без linq? Я думаю, что эта задача будет намного сложнее без linq, особенно потому, что есть вложенные элементы с тем же именем. Пожалуйста, разместите некоторые соответствующие коды, которые вы пробовали, даже если это не удалось. – har07

+0

Хорошо, можете ли вы дать мне решение в linq – Varghese

+0

Ваш XML-файл недействителен, как опубликовал (он имеет несколько корневых элементов). Это реальный формат? * да, это фактический формат *. Тогда мы не можем использовать linq в этом случае, потому что файл нельзя загрузить как объект XDocument. В противном случае, если xml-файл имеет один корень и действителен, у нас есть возможность использовать linq, и в этом случае вопрос состоит в том, из какого конкретного элемента вы хотите получить значение? – har07

ответ

1

Следующий пример консольного приложения демонстрирует способ получить <desc> элемент, который является прямым потомком <section> элемента, а также получить <name> и <desc> под каждым <diag> элементом. Я использую XDocument от System.Xml.Linq. Но не используя синтаксис запроса Linq, как не нужно в этом случае, и вы, кажется, не нравится:

//load xml string 
var doc = XDocument.Parse(xml); 
//or use XDocument.Load("path_to_xml_file.xml"); to load from file 

//get all <section> element 
var sections = doc.Root.Elements("section"); 
//get <desc> and all <diag> under each <section> 
foreach (var section in sections) 
{ 
    var desc = (string)section.Element("desc"); 
    Console.WriteLine(String.Format("new Section. Desc: {0}", desc)); 
    var diags = section.Descendants("diag"); 
    foreach (var diag in diags) 
    { 
     var name = (string)diag.Element("name"); 
     var desc2 = (string)diag.Element("desc"); 
     Console.WriteLine(String.Format("name: {0}, desc: {1}", name, desc2)); 
    } 
} 

обратите внимание, что Descendants() используется для получения любого ребенка текущего элемента и Element() используется для получения только прямые дочерний элемент текущего элемента.

Смежные вопросы