我的xml出了什么问题?

时间:2010-01-29 23:11:05

标签: 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="USD"  Index="INX" />
<Body></Body>
</Message>
</messageContent>

然后我有这个问题:

var messageType = xmlDoc.SelectSingleNode("/messageContent/Message[@type]");

但无论我尝试过什么,我都无法得到我正在寻找的节点。基本上我只是试着看看是否有一个节点(名为“Message”),里面有一个“type”属性。

有人有任何想法吗?

4 个答案:

答案 0 :(得分:3)

你的XML绝对没有问题 - 你的XPath表达式有问题,但是: - )

在代码中添加XML命名空间管理器:

XmlNamespaceManager mgr = new XmlNamespaceManager(xdoc.NameTable);
mgr.AddNamespace("ns", "http://tempuri.org/");

然后在执行SelectSingleNode时使用该命名空间管理器:

var messageType = xdoc.SelectSingleNode("/ns:messageContent/ns:Message[@type]", mgr);

这应该有效。

答案 1 :(得分:1)

您似乎需要在xpath上建立命名空间上下文,或者摆脱xmlns =“http://tempuri.org/”。

答案 2 :(得分:0)

直接向前但不会工作

XMLElement messageElement = (XMLElement) xmlDoc.SelectSingleNode("/messageContent/Message");
if(messageElement.HasAttribute("type"))

但问题是如果你有一个节点Message但是不包含type属性那么它的xml.Rather格式不合适我建议检查类型属性的内容,如下所示

XMLNode messageElement = xmlDoc.SelectSingleNode("/messageContent/Message[@type='MappedMessage']");
if(messageElement != null)
{
//Do SOmething
}

答案 3 :(得分:-1)

如果messageContent root 节点,则应省略它:/Message[@type]或者如果要检查文档的整个层次结构://Message[@type] < / p>