2010-11-19 4 views
1

다음은 읽으려고하는 XML 파일의 일부입니다.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 속성과 xml 파일의 아웃 TYPE 속성이를 얻는 것입니다. 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")) 
     { 
      //... 
     } 
    } 
    //... 
} 

나는 선택이 null을 반환 METADATA 그룹을 선택하려고

. 내 코드로 어떤 실수를합니까?

답변

1

<METADATA> 요소는 XML namespace에 있습니다. 당신은 Element() 방법에 해당 네임 스페이스를 지정해야합니다 :

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

은 자세한 내용은 XName 클래스를 참조하십시오.

+0

고마워요. –

관련 문제