DataSet ReadXml игнорирует атрибуты с префиксом

#c# #xml #visual-studio-2010 #xml-parsing #dataset

#c# #xml #visual-studio-2010 #синтаксический анализ xml #набор данных

Вопрос:

У меня есть следующий XML-код, который я хочу прочитать в наборе данных:

 <?xml version="1.0" standalone="yes"?>
<jlqn:Root xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:jlqn="http://jlqn/1.0">
  <element xsi:type="jlqn:Processor" name="test1" processor="test">
    <metadata name="Removed" value="False" />
    <task id="6">
      <entry id="8" entry="" />
    </task>
  </element>
  <element xsi:type="jlqn:Processor" name="test1" processor="test" id="1">
    <metadata name="Removed" value="True" />
    <metadata name="Removed1" value="Removed1" />
  </element>
  <element xsi:type="jlqn:Processor" name="test1" processor="test" id="3">
    <metadata name="Removed" value="False" />
    <task id="45" name="">
      <metadata />
      <entry id="10" entry="">
        <metadata />
      </entry>
    </task>
  </element>
  <element name="test" />
</jlqn:Root>
  

Я использую следующий код C #

   DataSet newTable = new DataSet();
            newTable.ReadXml(@"F:QVTruntime-EclipseApplicationdr5HJYU.jlqn");
  

Но когда я проверяю набор данных, я замечаю, что все атрибуты с префиксом не читаются .. например, так: xsi:type=»jlqn:Processor»

что я могу сделать?

Ответ №1:

XML ссылается на префикс пространства имен «xsi», но он не определен. Измените корневой элемент на:

 <jlqn:Root xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:jlqn="http://jlqn/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  

Как только я это сделал, я получил следующие таблицы и столбцы:

 Root
  Root_Id
  version
element
  element_Id
  name
  processor
  id
  Root_Id
metadata
  name
  value
  element_Id
task
  metadata
  task_Id
  id
  name
  element_Id
entry
  metadata
  id
  entry
  task_Id
  

Это вывод из:

 DataSet newTable = new DataSet();
newTable.ReadXml(@"XMLFile1.xml");

foreach(DataTable table in newTable.Tables)
{
    Console.WriteLine(table.TableName);

    foreach(DataColumn column in table.Columns)
    {
        Console.WriteLine("  "   column.ColumnName);
    }
}
  

Комментарии:

1. Спасибо, но все же «xsi: type=»jlqn:Processor» не заполняется в наборе данных!