如何使用 XElement 打开 xml?

Posted

技术标签:

【中文标题】如何使用 XElement 打开 xml?【英文标题】:How to open xml using XElement? 【发布时间】:2016-06-03 06:56:57 【问题描述】:

我正在尝试从我的机​​器加载 metadata.xml 文件,但它给出了类似的错误

“:”字符,十六进制值 0x3A,不能包含在名称中。

请让我帮助找到使用 XElement 加载 xml 的正确方法。

C# 代码

private static void xmlProcess()
        

            string filePath = @"D:\metadata.xml";
            if (System.IO.File.Exists(filePath))
            

                // load xml file from destination folder
                XElement document = new XElement(filePath);

                var country = "IN";
                var curProduct = document.Elements("country").Where(t => t.Value == country).FirstOrDefault().Parent;

            
        

XML 文件(metadata.xml)

<root version="mech5.2">
  <language>en-US</language>
  <provider>Provider1</provider>
  <data>
    <title>Engine1</title>
    <vendor_id>ABC</vendor_id>
    <products>
      <product>
        <country>IN</country>
        <times>
          <time>
            <start_date>2017-01-15</start_date>
            <end_date>2017-09-15</end_date>
          </time>
        </times>
      </product>
    </products>
  </data>
</root>

为什么我会收到此错误:“':' 字符,十六进制值 0x3A,不能包含在名称中”

【问题讨论】:

你发布的xml很好。用记事本打开文件,确保它与您发布的文件匹配。我在任何地方都看不到冒号,这会导致您发布的错误。 我会将您的查询更改为以下内容:var curProduct = document.Descendants("product").Where(t => (string)t.Element("country") == country)。 FirstOrDefault(); 【参考方案1】:

您可以只使用 XElement.Load() 从 XML 文件创建和填充 XElement

XElement document = XElement.Load(filePath);

【讨论】:

【参考方案2】:

问题是您尝试使用错误形式的构造函数。 XElement 试图将您的文件路径字符串转换为实例名称,这显然行不通。试试这个。

XElement x = new XElement();
x.Load(filePath);

ps。仔细检查您正在使用的构造函数的声明 https://msdn.microsoft.com/en-us/library/bb292758(v=vs.110).aspx

【讨论】:

感谢重播,这不是 XmlDocument。我正在使用 System.Xml.Linq.XElement。不工作

以上是关于如何使用 XElement 打开 xml?的主要内容,如果未能解决你的问题,请参考以下文章

使用 XElement 保存 XML 文件时,文件中的对齐方式也会发生变化,如何避免?

如何在c#中使用xelement获取xml节点值

如何将带有 xml 后代的 XElement 导入 SQL Server

如何在 XML 文档中的特定位置添加 XElement

使用 XElement 解析 XML

如何将 Dictionary<XElement,XElement> 转换为 xml 文件?