代码之家  ›  专栏  ›  技术社区  ›  Scott Chamberlain

从XML文件中读取节点时出错

  •  1
  • Scott Chamberlain  · 技术社区  · 15 年前

    这是我试图阅读的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 回复  |  直到 15 年前
        1
  •  1
  •   Frédéric Hamidi    15 年前

    你的 <METADATA> 元素位于 XML namespace . 必须将该命名空间指定给 Element() 方法:

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

    XName 类获取更多详细信息。

    推荐文章