Что не так с моим XML? - PullRequest
       14

Что не так с моим XML?

1 голос
/ 30 января 2010

у меня есть следующий 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 ]

3 голосов
/ 30 января 2010

В вашем 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 голос
/ 30 января 2010

Похоже, вам нужно установить контекст пространства имен на вашем xpath или избавиться от этого xmlns = "http://tempuri.org/".

0 голосов
/ 30 января 2010

НЕ прямолинейно, но будет работать

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

Но дело в том, что если у вас есть узел Сообщение, но он не содержит атрибута типа, то это неправильный формат xml. Скорее, я бы предложил проверить содержимое атрибута типа, как показано ниже

XMLNode messageElement = xmlDoc.SelectSingleNode("/messageContent/Message[@type='MappedMessage']");
if(messageElement != null)
{
//Do SOmething
}
0 голосов
/ 30 января 2010

Если messageContent является узлом root , его следует опустить, например: /Message[@type] или если вы хотите проверить всю иерархию документа: //Message[@type]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...