Я хочу отсортировать XML-документ по атрибутам дочернего узла.Я работаю с Windows Forms в Visual C ++.Я попытался использовать предложенное решение здесь, на Stackoverflow .Но почему-то это не сработает.
Мой несортированный XML-Doc выглядит следующим образом:
<Message-List>
<Message sendTime="0"></Message>
<Message sendTime="20"></Message>
<Message sendTime="5"></Message>
</Message-List>
Мой отсортированный XML-Docдолжно выглядеть следующим образом:
<Message-List>
<Message sendTime="0"></Message>
<Message sendTime="5"></Message>
<Message sendTime="20"></Message>
</Message-List>
Я пытался выполнить следующий код, но возвращаемая строка checkme - 0205 .Так что сортировка даже не работает.
System::Xml::XmlDocument^ sourceXmlDoc = gcnew XmlDocument;
sourceXmlDoc->LoadXml("<Message-List><Message sendTime=\"0\"></Message><Message sendTime=\"20\"></Message><Message sendTime=\"5\"></Message></Message-List>");
System::Xml::XPath::XPathNavigator^ navigator = sourceXmlDoc->CreateNavigator();
System::Xml::XPath::XPathExpression^ selectExpression = navigator->Compile("Message-List/Message");
System::Xml::XPath::XPathExpression^ sortExpr = navigator->Compile("@sendTime");
selectExpression->AddSort(sortExpr, XmlSortOrder::Ascending, XmlCaseOrder::None, "", XmlDataType::Text);
System::Xml::XPath::XPathNodeIterator^ nodeIterator = navigator->Select(selectExpression);
String^ checkMe;
while (nodeIterator->MoveNext())
{
if (nodeIterator->Current->MoveToFirstAttribute())
{
checkMe = checkMe + nodeIterator->Current->Value;
}
}
Более того, я застрял в том, как действовать в цикле while.Как я могу сохранить восстановленный xmlDoc как XmlDocument?