从没有名称空间的字符串加载XElement

时间:2016-05-17 06:07:06

标签: c# linq-to-xml xelement

我想从包含名称空间前缀的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实现这一点并将命名空间设置为off但我想使用XDocuemnt或XElement来实现。

是否可以在Xelement中加载此字符串而不提供名称空间?

1 个答案:

答案 0 :(得分:2)

最终,您必须为前缀提供命名空间,否则您将无法将其解析为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();