Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使用XElement检索XML元素的值_C#_Xml Parsing_Linq To Xml_Xelement - Fatal编程技术网

C# Can';t使用XElement检索XML元素的值

C# Can';t使用XElement检索XML元素的值,c#,xml-parsing,linq-to-xml,xelement,C#,Xml Parsing,Linq To Xml,Xelement,我试图从一个通过文件浏览器提供的XML文件中读取数据,但是这些值是空的,即使我可以看到XML文件通过元素 public void UploadXml(Stream fileStream) { //Load xml fileStream.Position = 0; var xdoc = XElement.Load(fileStream); IEnumerable<XElement> elements = xdoc.Elements

我试图从一个通过文件浏览器提供的XML文件中读取数据,但是这些值是空的,即使我可以看到XML文件通过元素

  public void UploadXml(Stream fileStream)
  {
    //Load xml
      fileStream.Position = 0;

      var xdoc = XElement.Load(fileStream);

      IEnumerable<XElement> elements = xdoc.Elements();

      var codeList = new CodeList();

      foreach (var item in elements)
      {
          codeList.Name = item.Element("CODELIST_NAME").Value;
          codeList.Description = item.Element("DESRIPTION").Value;
          codeList.Version = item.Element("VERSION").Value;
          codeList.EffectiveDate = DateTime.Parse(item.Element("EFFECTIVE_DATE").Value);
          codeList.ExpirationDate = DateTime.Parse(item.Element("EXPIRATION_DATE").Value);
      }
      // save code list

      // get code list ID

      // create codes
  }
在一个普通的文件中,文件中会有数据,很明显,我只是为了样本而删除了它

数据库中的行将重复受约束的值标记

IEnumerable<XElement> elements = xdoc.Elements();
IEnumerable elements=xdoc.elements();
定义要解析的元素的父元素。例如,如果您的xml类似于:

<parent>
    <CODELIST_NAME></CODELIST_NAME>
    <DESRIPTION></DESRIPTION>
    <VERSION></VERSION>
    <EFFECTIVE_DATE></EFFECTIVE_DATE>
    <EXPIRATION_DATE></EXPIRATION_DATE>
</parent>

然后写成

IEnumerable<XElement> elements = xdoc.Elements("parent");
IEnumerable elements=xdoc.elements(“父元素”);
吉安尼斯

IEnumerable elements=xdoc.elements();
定义要解析的元素的父元素。例如,如果您的xml类似于:

<parent>
    <CODELIST_NAME></CODELIST_NAME>
    <DESRIPTION></DESRIPTION>
    <VERSION></VERSION>
    <EFFECTIVE_DATE></EFFECTIVE_DATE>
    <EXPIRATION_DATE></EXPIRATION_DATE>
</parent>

然后写成

IEnumerable<XElement> elements = xdoc.Elements("parent");
IEnumerable elements=xdoc.elements(“父元素”);
Giannis

您需要指定(默认)名称空间

  var xdoc = XElement.Load(fileStream);
  var dns = xdoc.GetDefaultNamespace();
  ....
然后您的循环变成(还添加了一些范围修正)

您需要指定(默认)名称空间

  var xdoc = XElement.Load(fileStream);
  var dns = xdoc.GetDefaultNamespace();
  ....
然后您的循环变成(还添加了一些范围修正)


谢谢你的帮助,这对我很有用

我的问题是如何解读这些价值观

xdoc.Element(XName.Get("CODELIST", dns.NamespaceName)).Element(XName.Get("CODELIST_NAME", dns.NamespaceName)).Value,

通过这种方式阅读,我已经解决了这个问题。

谢谢你的帮助,解决这个问题对我很有用

我的问题是如何解读这些价值观

xdoc.Element(XName.Get("CODELIST", dns.NamespaceName)).Element(XName.Get("CODELIST_NAME", dns.NamespaceName)).Value,

通过这种方式阅读,我已经解决了这个问题。

我知道你找到了答案,但我想把我所做的一切,让它正常运行只是为了好玩:)以下是我使用的代码:

using System;
using System.Xml;
using System.Xml.Linq;

namespace xmlTesting
{
  public class codeList
  {
    public string Name { get; set; }
    public string Description { get; set; }
    public string Version { get; set; }
    public DateTime EffectiveDate { get; set; }
    public DateTime ExpirationDate { get; set; }
  }

  class program {

    static void Main(string[] args)
    {
      var CL = UploadXml(XElement.Load(@"c:\debug\xmlcontent.xml"));
      Console.WriteLine(
        string.Format("name: {0}\nDesc: {1}\nVersion: {2}\nEffectivdate: {3}\nExp: {4}"
        , CL.Name, CL.Description, CL.Version, CL.EffectiveDate, CL.ExpirationDate)
        );
      Console.ReadKey(true);
    }

    public static codeList UploadXml(XElement xdoc)
    {
      var codeList = new codeList();

      foreach (XElement XE in xdoc.Descendants())
      {
        switch (XE.Name.LocalName)
        {
          case "CODELIST_NAME":
            codeList.Name = XE.Value;
            break;
          case "DESCRIPTION":
            if(codeList.Description == null)
            codeList.Description = XE.Value;
            break;
          case "VERSION":
            codeList.Version = XE.Value;
            break;
          case "EFFECTIVE_DATE":
            codeList.EffectiveDate = DateTime.Parse(XE.Value);
            break;
          case "EXPIRATION_DATE":
            codeList.ExpirationDate = DateTime.Parse( XE.Value);
            break;
        }
      }
      // save code list

      // get code list ID

      // create codes
      return codeList;
    }
  }
}
我使用的xml是这样的

<?xml version="1.0" encoding="utf-8"?>
<CONTEXT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"    
         xmlns="http://www.w3.org/2000/xmlns">
  <CONTEXT_NAME></CONTEXT_NAME>
  <CODELIST>
    <CODELIST_NAME>a name</CODELIST_NAME>
        <DESCRIPTION>a desr</DESCRIPTION>
        <VERSION>test1.1</VERSION>
        <USERNAME>test user</USERNAME>
        <OWNER_TEAM />
        <STEWARD_TEAM />
        <STATUS></STATUS>
        <LAST_MODIFIED>a day</LAST_MODIFIED>
        <LAST_MODIFIED_NAME>trae</LAST_MODIFIED_NAME>
        <EFFECTIVE_DATE>07/05/1983</EFFECTIVE_DATE>
        <EXPIRATION_DATE>07/05/1983</EXPIRATION_DATE>
        <FILE_TIMESTAMP></FILE_TIMESTAMP>
       <CONSTRAINED_VALUE>
           <CODE></CODE>
           <PARENT_ID />
           <NAME></NAME>
           <DESCRIPTION></DESCRIPTION>
       </CONSTRAINED_VALUE>
 </CODELIST>
</CONTEXT>

我知道你找到了答案,但我想把我为使其正常运行所做的一切仅仅为了好玩:)以下是我使用的代码:

using System;
using System.Xml;
using System.Xml.Linq;

namespace xmlTesting
{
  public class codeList
  {
    public string Name { get; set; }
    public string Description { get; set; }
    public string Version { get; set; }
    public DateTime EffectiveDate { get; set; }
    public DateTime ExpirationDate { get; set; }
  }

  class program {

    static void Main(string[] args)
    {
      var CL = UploadXml(XElement.Load(@"c:\debug\xmlcontent.xml"));
      Console.WriteLine(
        string.Format("name: {0}\nDesc: {1}\nVersion: {2}\nEffectivdate: {3}\nExp: {4}"
        , CL.Name, CL.Description, CL.Version, CL.EffectiveDate, CL.ExpirationDate)
        );
      Console.ReadKey(true);
    }

    public static codeList UploadXml(XElement xdoc)
    {
      var codeList = new codeList();

      foreach (XElement XE in xdoc.Descendants())
      {
        switch (XE.Name.LocalName)
        {
          case "CODELIST_NAME":
            codeList.Name = XE.Value;
            break;
          case "DESCRIPTION":
            if(codeList.Description == null)
            codeList.Description = XE.Value;
            break;
          case "VERSION":
            codeList.Version = XE.Value;
            break;
          case "EFFECTIVE_DATE":
            codeList.EffectiveDate = DateTime.Parse(XE.Value);
            break;
          case "EXPIRATION_DATE":
            codeList.ExpirationDate = DateTime.Parse( XE.Value);
            break;
        }
      }
      // save code list

      // get code list ID

      // create codes
      return codeList;
    }
  }
}
我使用的xml是这样的

<?xml version="1.0" encoding="utf-8"?>
<CONTEXT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"    
         xmlns="http://www.w3.org/2000/xmlns">
  <CONTEXT_NAME></CONTEXT_NAME>
  <CODELIST>
    <CODELIST_NAME>a name</CODELIST_NAME>
        <DESCRIPTION>a desr</DESCRIPTION>
        <VERSION>test1.1</VERSION>
        <USERNAME>test user</USERNAME>
        <OWNER_TEAM />
        <STEWARD_TEAM />
        <STATUS></STATUS>
        <LAST_MODIFIED>a day</LAST_MODIFIED>
        <LAST_MODIFIED_NAME>trae</LAST_MODIFIED_NAME>
        <EFFECTIVE_DATE>07/05/1983</EFFECTIVE_DATE>
        <EXPIRATION_DATE>07/05/1983</EXPIRATION_DATE>
        <FILE_TIMESTAMP></FILE_TIMESTAMP>
       <CONSTRAINED_VALUE>
           <CODE></CODE>
           <PARENT_ID />
           <NAME></NAME>
           <DESCRIPTION></DESCRIPTION>
       </CONSTRAINED_VALUE>
 </CODELIST>
</CONTEXT>

您能展示一个XML示例吗?您能粘贴一个XML示例吗?还要注意,
.Elements()
获取1级的直接子元素,而不是其下的所有级别。使用
subgents()。其中(x=>x是XElement)
将它们放在整个树中。我强烈怀疑这是名称空间问题。还请注意,如果日期/时间值与XML兼容,只需将元素强制转换为DateTime即可。对于此行codeList.Name=item.element(“codeList_Name”).Value,代码将引发空异常错误;哪一个在日期时间之前?您可以展示一个XML示例吗?您可以粘贴一个XML示例吗?还要注意,
.Elements()
获取1级的直接子元素,而不是其下的所有级别。使用
subgents()。其中(x=>x是XElement)
将它们放在整个树中。我强烈怀疑这是名称空间问题。还请注意,如果日期/时间值与XML兼容,只需将元素强制转换为DateTime即可。对于此行codeList.Name=item.element(“codeList_Name”).Value,代码将引发空异常错误;这是在日期时间之前,我尝试过类似的东西,但当我怀疑时,元素将“不产生结果”,我尝试过类似的东西,但当我这样做时,元素将“不产生结果”当我怀疑时,另一种方法更容易阅读,但出于某种原因,它对我不起作用。另一种方法更容易阅读,但出于某种原因,它对我不起作用。这看起来很整洁,我必须在接下来的一两周内重新考虑时尝试一下。我会让你了解它的最新情况看起来很整洁,在接下来的一两周内我们重新进行保理时,我会尝试一下。我会让你了解最新情况