假设这个简单的 XML 片段中可能有也可能没有 xml 声明,并且恰好有一个NodeElement
作为根节点,紧接着是另一个NodeElement
,它可能包含各种数量的不同类型的元素。
<?xml version="1.0">
<NodeElement xmlns="xyz">
<NodeElement xmlns="">
<SomeElement></SomeElement>
</NodeElement>
</NodeElement>
我怎么能在NodeElement
没有命名空间的情况下选择内部及其内容?例如,"//*[local-name()='NodeElement/NodeElement[1]']"
(以及我尝试过的其他变体)似乎没有产生结果。
至于一般来说,我真正想要完成的事情是反序列化包含在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 表达式,这似乎是相当难以捉摸的。非常感谢任何帮助!