Xml 解析而不知道名称空间

Xml 解析而不知道名称空间,xml,xml-parsing,linq-to-xml,xelement,Xml,Xml Parsing,Linq To Xml,Xelement,给定 问题是XElement.Load失败,因为它不知道在根节点上声明的“cm”命名空间。而且,XElement不允许我设置内部XML。我知道这是一种有点非正统的修改XML的方式(我敢说是滥用),但这正是我必须接受的。好吧,您将无法摆脱这样一个事实,即片段本身不是有效的XML,无法直接解析。这里有一个相当肮脏的方法来解决这个问题,使用字符串Xml操作和片段的临时包装器,其中包含片段使用的名称空间 <Person> <cm:Name>Jane Doe</cm:

给定


问题是XElement.Load失败,因为它不知道在根节点上声明的“cm”命名空间。而且,XElement不允许我设置内部XML。我知道这是一种有点非正统的修改XML的方式(我敢说是滥用),但这正是我必须接受的。

好吧,您将无法摆脱这样一个事实,即片段本身不是有效的XML,无法直接解析。这里有一个相当肮脏的方法来解决这个问题,使用字符串Xml操作和片段的临时包装器,其中包含片段使用的名称空间

<Person>
    <cm:Name>Jane Doe</cm:Name>
</Person>
original.ReplaceWith(XElement.Load("Fragment.xml"));
const string fragmentWrapper=
@“@TOKEN@”;
var original=XDocument.Parse(原始XML);
var fragmentDoc=XDocument.Parse(fragmentWrapper.Replace(“@TOKEN@”,fragmentXml));
原始。后代(“人”)
.First().replacetwith(fragmentDoc.substands(“Person”)
.First());
Debug.WriteLine(original.ToString());
original.ReplaceWith(XElement.Load("Fragment.xml"));
 const string fragmentWrapper = 
                     @"<Message xmlns:cm=""somenamespace"">@TOKEN@</Message>";

 var original = XDocument.Parse(originalXml);
 var fragmentDoc = XDocument.Parse(fragmentWrapper.Replace("@TOKEN@", fragmentXml));
 original.Descendants("Person")
         .First().ReplaceWith(fragmentDoc.Descendants("Person")
                                         .First());
 Debug.WriteLine(original.ToString());