我正在尝试将节点(以字符串格式)加载到XElement中.虽然这应该很容易,但我发现了一些问题:
XElement.Load()或Xelement.Parse()我得到预期的未定义的命名空间错误我知道解决方案是使用命名空间定义创建一个周围的节点,然后加载整个东西,但我想知道是否有一个更优雅的解决方案,不涉及字符串操作.
这是我失败的尝试:(
我有一组命名空间属性:
private readonly List<XAttribute> _namespaces;
Run Code Online (Sandbox Code Playgroud)
这已经填充并包含所有必要的命名空间.因此,要将我的XML字符串嵌入另一个节点,我这样做:
var temp = new XElement("root", (from ns in _namespaces select ns), MyXMLString);
Run Code Online (Sandbox Code Playgroud)
但正如我所预料的那样,MyXMLString的内容会被转义并成为文本节点.我得到的结果是:
<root xmlns:mynamespace="http://mynamespace.com"><mynamespace:node>node text</node></root>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的结果是:
<root xmlns:mynamespace="http://mynamespace.com">
<mynamespace:node>node text</node>
</root>
Run Code Online (Sandbox Code Playgroud)
有一个巧妙的方法来做到这一点?
提前致谢
据推测,您的XML文本实际上已经很好地形成了(注意结束标记上的名称空间限定符):
var xml = "<mynamespace:node>node text</mynamespace:node>";
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以使用它来手动指定名称空间:
var mngr = new XmlNamespaceManager( new NameTable() );
mngr.AddNamespace( "mynamespace", "urn:ignore" ); // or proper URL
var parserContext = new XmlParserContext(null, mngr, null, XmlSpace.None, null);
Run Code Online (Sandbox Code Playgroud)
现在阅读并加载:
var txtReader = new XmlTextReader( xml, XmlNodeType.Element, parserContext );
var ele = XElement.Load( txtReader );
Run Code Online (Sandbox Code Playgroud)
按预期工作.而且您不需要包装器"root"节点.现在,这可以插入到任何XElement地方.
| 归档时间: |
|
| 查看次数: |
3088 次 |
| 最近记录: |