2016-05-17 5 views
1

Я хочу загрузить XElement из строки XML, содержащей префиксы пространств имен. Например:Загрузить XElement из строки без пространств имен

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

В выше XML ком относится к пространству имен, как xmlns:com = "somevalue" Когда я использовал XElement.Parse(xml) метод, который он выдает сообщение об ошибке.

Я также попытался загрузить такой XML в XmlDocument, и это позволяет мне достичь этого с помощью xmlreader и отключить пространство имен, но я хочу сделать это с помощью XDocuemnt или XElement.

Можно ли загрузить эту строку в Xelement без предоставления пространства имен?

ответ

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();