我从合作伙伴公司收到了一条相对复杂的 xml 消息。我需要解析 xml 才能使用它。我让它工作正常,然后他们改变了消息,现在我的 SelectSingleNode 命令都不起作用。
消息的结构。请注意带有嵌入式 xml 文档的 CDATA 对象。不确定这是否重要。我能够剔除 dataContent 对象,所以它不应该有所作为。这是我加载到 XmlDocument 中的内容:
<ns5:dataContent xmlns:ns2="http://test/common/v1"
xmlns="http://test/schema/common"
xmlns:ns4="http://test/credentialing/stuff/v1"
xmlns:ns3="http://test/schema/ims/common/v1"
xmlns:ns5="http://test/schema/v1">
<createdBy>Micky</createdBy>
<createdAt>2011-03-08T17:00:27.050-05:00</createdAt>
<ns5:Id>39</ns5:Id>
<ns5:Type>4</ns5:Type>
-- lots more data --
</ns5:dataContent>
我的代码相当简单
var xmlDoc = new XmlDocument();
xmlDoc.Load(new StringReader(CDATA content));
var xmlNsM = new XmlNamespaceManager(xmlData.NameTable);
xmlNsM.AddNamespace(String.Empty, @"http://test/schema/common\");
xmlNsM.AddNamespace("ns5", @"http://test/schema/v1\");
xmlNsM.AddNamespace("m", @"http://test/message/v1\");
//This works
var order = xmlDoc.ChildNodes[0];
//This returns null
var ID = order.SelectSingleNode("ns5:Id", xmlNsM);
我可以看到 xmlDoc 正在正确加载。我尝试将所有 6 个命名空间添加到 xmlNsM,但得到相同的结果。我的 SelectSingleNodes 现在都不工作了。
我在这个主题上找到的每一篇文章都说只使用命名空间管理器,但我已经知道这一点,所以这不是一个很有成效的下午。