【问题标题】:Load XElement from string without namespaces从没有命名空间的字符串加载 XElement
【发布时间】:2016-05-17 06:07:06
【问题描述】:

我想从包含命名空间前缀的 XML 字符串加载 XElement。例如:

string template = @"<com:PersonName>
  <com:FirstName>def</com:FirstName>
      <com:LastName>abc</com:LastName>
  </com:PersonName>";

在上面的 XML com 中指的是像 xmlns:com = "somevalue" 这样的命名空间 当我使用XElement.Parse(xml) 方法时,它会引发错误。

我也尝试在 XmlDocument 中加载此类 XML,它允许我使用 xmlreader 实现此目的并将命名空间设置为关闭,但我想使用 XDocuemnt 或 XElement 来实现。

是否可以在不提供命名空间的情况下将这个字符串加载到 Xelement 中?

【问题讨论】:

    标签: c# linq-to-xml xelement


    【解决方案1】:

    最终你必须为前缀提供一个命名空间,否则你将无法将它解析为XElement。解决此问题的一种方法是向字符串中添加具有命名空间定义的虚拟根元素并对其进行解析。然后从解析后的节点中获取子元素。

    var template = @"<com:PersonName>
    <com:FirstName>def</com:FirstName>
        <com:LastName>abc</com:LastName>
    </com:PersonName>";
    var fixedTemplate = $"<root xmlns:com=\"somevalue\">{template}</root>";
    var element = XElement.Parse(fixedTemplate).Elements().Single();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2016-03-05
      相关资源
      最近更新 更多