我想按照子節點的屬性對XML文檔進行排序。我正在使用Visual C++中的Windows窗體。我試圖使用建議的解決方案here on Stackoverflow。但不知何故,它不會工作。按C++,XPath,Windows Forms中的屬性對XmlDocument中的節點排序
我無序 XML的文檔如下所示:
<Message-List>
<Message sendTime="0"></Message>
<Message sendTime="20"></Message>
<Message sendTime="5"></Message>
</Message-List>
我分類 XML的文件應該是這樣的:
<Message-List>
<Message sendTime="0"></Message>
<Message sendTime="5"></Message>
<Message sendTime="20"></Message>
</Message-List>
我嘗試下面的代碼,但checkme - 返回的字符串是。所以排序甚至不起作用。
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?
哦,我的錯。那麼編譯在這個例子中是錯誤的。但在實際使用的代碼中,它適合真正的XML節點。我更新了守則。我將看看selectExpression-> AddSort。 但看看我發佈的鏈接中發佈的解決方案,它應該實際上工作。對?至少這就是discorax在這裏所說的:http://stackoverflow.com/questions/344737/sorting-xml-nodes-based-on-datetime-attribute-c-xpath – EliteTUM