【发布时间】:2013-10-22 21:33:37
【问题描述】:
假设这个简单的 XML 片段中可能有也可能没有 xml 声明,并且恰好有一个 NodeElement 作为根节点,紧随其后的是另一个 NodeElement,其中可能包含各种不同数量的分类各种元素。
<?xml version="1.0">
<NodeElement xmlns="xyz">
<NodeElement xmlns="">
<SomeElement></SomeElement>
</NodeElement>
</NodeElement>
在没有命名空间的情况下,如何选择内部 NodeElement 及其内容?例如,"//*[local-name()='NodeElement/NodeElement[1]']"(以及我尝试过的其他变体)似乎没有产生结果。
一般而言,我真正想要完成的事情是Deserialize 包含在XmlDocument 中的更大XML 文档的片段。类似于以下内容
var doc = new XmlDocument();
doc.LoadXml(File.ReadAllText(@"trickynodefile.xml")); //ReadAllText to avoid Unicode trouble.
var n = doc.SelectSingleNode("//*[local-name()='NodeElement/NodeElement[1]']");
using(var reader = XmlReader.Create(new StringReader(n.OuterXml)))
{
var obj = new XmlSerializer(typeof(NodeElementNodeElement)).Deserialize(reader);
我相信我只是缺少正确的 XPath 表达式,这似乎相当难以捉摸。非常感谢任何帮助!
【问题讨论】:
标签: c# .net xml serialization xpath