什么';我的xml有什么问题?
我有以下xml:什么';我的xml有什么问题?,xml,xpath,Xml,Xpath,我有以下xml: <messageContent xmlns="http://tempuri.org/" > <Message type="MappedMessage" > <Properties RequestId="Point-CurveRequest-8326ad44-a1cd-4a96-b4ef-1c4ad213d940" Action="getParCurves" EESId="EESID:NY:20100128:BASE" Currency="US
<messageContent xmlns="http://tempuri.org/" >
<Message type="MappedMessage" >
<Properties RequestId="Point-CurveRequest-8326ad44-a1cd-4a96-b4ef-1c4ad213d940" Action="getParCurves" EESId="EESID:NY:20100128:BASE" Currency="USD" Index="INX" />
<Body></Body>
</Message>
</messageContent>
但无论我做了什么尝试,我都无法得到我正在寻找的节点。基本上,我只是想看看是否有一个节点(名为“Message”)里面有一个“type”属性
有人知道吗?您似乎需要在xpath上建立一个名称空间上下文,或者去掉xmlns=”http://tempuri.org/“如果
messageContent
是根节点您应该像这样省略它:/Message[@type]
或者,如果您想检查文档的整个层次结构://Message[@type]
这不是一个直截了当的方法,但会起作用
XMLElement messageElement = (XMLElement) xmlDoc.SelectSingleNode("/messageContent/Message");
if(messageElement.HasAttribute("type"))
但问题是,如果您有一个节点消息,但不包含type属性,那么它就不是正确的xml格式
XMLNode messageElement = xmlDoc.SelectSingleNode("/messageContent/Message[@type='MappedMessage']");
if(messageElement != null)
{
//Do SOmething
}
您的XML绝对没有问题-但是XPath表达式有问题:-) 将XML命名空间管理器添加到代码中:
XmlNamespaceManager mgr = new XmlNamespaceManager(xdoc.NameTable);
mgr.AddNamespace("ns", "http://tempuri.org/");
然后在执行选择SingleNode
时使用该命名空间管理器:
var messageType = xdoc.SelectSingleNode("/ns:messageContent/ns:Message[@type]", mgr);
这应该行。即使它是整个文档的默认名称空间,它是否仍然有效?是的,我想我需要知道您使用的是什么XPath包,或者您使用的是什么语言。@b参数:有趣,在PHP下使用SimpleXml时不是这样的-虽然我不确定我认为在使用DOMDCUMENT时也不重要。。。只要它是整个文档的默认ns。这应该解释更多:@或A:您可以发布使用MSDN用法示例的实现吗?
var messageType = xdoc.SelectSingleNode("/ns:messageContent/ns:Message[@type]", mgr);