Проблемы с чтением узлов из файла XML - PullRequest
1 голос
/ 19 ноября 2010

Вот фрагмент файла XML, который я пытаюсь прочитать.

<?xml version="1.0" encoding="UTF-8" ?> 
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
   <ERRORCODE>0</ERRORCODE> 
   <PRODUCT BUILD="06-11-2010" NAME="FileMaker" VERSION="Pro 11.0v2" /> 
   <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="Appointments.fp7" RECORDS="13" TIMEFORMAT="h:mm:ss a" /> 
   <METADATA>
      <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="CalDateCalc1" TYPE="DATE" /> 
      <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="CalDateCalc2" TYPE="DATE" /> 
      <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="CalDateCalc3" TYPE="DATE" /> 
      ...
   </METADATA>
   ...
</FMPXMLRESULT>

Моя цель - получить атрибут NAME и атрибут TYPE из файла xml.Я пытался использовать и XElement, и XPath, но не смог ни сработать.

foreach (var file in System.IO.Directory.EnumerateFiles(path, "*.xml", System.IO.SearchOption.TopDirectoryOnly))
{
    var fileInfo = new System.IO.FileInfo(file);
    var name = fileInfo.Name.Split('.')[0];
    XElement root = XElement.Load(file);
    if (!db.Tables.Contains(name))
    {
        XElement MetaData = root.Element("METADATA"); //This returns null
        foreach(var field in MetaData.Elements("FIELD"))
        {
            //...
        }
    }
    //...
}

Когда я пытаюсь выбрать группу METADATA, выборка возвращает ноль.Какую ошибку я делаю с моим кодом?

1 Ответ

1 голос
/ 19 ноября 2010

Ваш <METADATA> элемент находится в XML-пространстве имен . Вы должны указать это пространство имен для метода Element () :

XNamespace ns = "http://www.filemaker.com/fmpxmlresult";
XElement metaData = root.Element(ns + "METADATA");  // This will work.

См. Класс XName для получения более подробной информации.

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