【发布时间】:2012-10-28 16:47:09
【问题描述】:
我想按子节点的属性对 XML 文档进行排序。我正在使用 Visual C++ 中的 Windows 窗体。我尝试使用here on 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-String 是 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?
【问题讨论】:
标签: sorting attributes c++-cli xmldocument