У меня ниже XML-файл данных с двумя узлами, имеющие количество более 100,
<DO>
<delivery>
<dono>DM202422</dono>
<custcode>M15</custcode>
<custname>A Company</custname>
<stockcode>ZPP56012303001</stockcode>
<stockdesc>56012303001 DUPLEX PTD BOX</stockdesc>
<unitprice>2.1900</unitprice>
<qty>500</qty>
<amount>1095.00</amount>
</delivery>
<delivery>
<dono>DM202432</dono>
<custcode>M23</custcode>
<custname>B Company</custname>
<stockcode>ZPP5605855V16</stockcode>
<stockdesc>5605855 V16 PLAIN BOX</stockdesc>
<unitprice>0.1000</unitprice>
<qty>2000</qty>
<amount>200.00</amount>
</delivery>
</DO>
Мой вопрос здесь заключается в том, как предположить, что я мог бы отображать 2 значения дочерних элементов под каждым узлом, используя XPathNavigator.
Если позволено, мне нужно отобразить dono и custcode в каждой строке цикла итерации, как, например, в dono = «DM202422» и custcode = «M15» в custname = «A Company».
Может ли кто-нибудь помочь мне улучшить мои приведенные ниже коды, это просто отобразить один дочерний элемент и тот же элемент после того, как я перейду к следующему дочернему элементу.
void queryinxpath()
{
System::Xml::XPath::XPathDocument^ doc = gcnew System::Xml::XPath::XPathDocument("C:/test.xml");
System::Xml::XPath::XPathNavigator^ nav = doc->CreateNavigator();
System::Xml::XPath::XPathExpression^ expr = nav->Compile("descendant::delivery[amount > 100]");
System::Xml::XPath::XPathNodeIterator^ iterator=nav->Select(expr);
while (iterator->MoveNext())
{
System::Xml::XPath::XPathNavigator^ nav_ = iterator->Current->Clone();
nav_->MoveToChild("dono","");
System::Console::WriteLine("DO No: {0} ",nav_->Value);
nav_->MoveToChild("custcode","");
System::Console::WriteLine("Customer Code : {0} ",nav_->Value);
System::Console::WriteLine("\n");
}}
Результат неправильного результата:
DO №: DM202422
Код клиента: DM202422
Мой желаемый результат:
DO №: DM202422
Код клиента: M15
Заранее спасибо, что любой мог решить мою проблему.
добавление nav _-> MoveToParent () в верхнюю часть nav _-> MoveToChild («dono», «») после каждого занятого навигатора решит мои проблемы.
while (iterator->MoveNext())
{
System::Xml::XPath::XPathNavigator^ nav_ = iterator->Current->Clone();
nav_->MoveToChild("dono","");
System::Console::WriteLine("DO No: {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("custcode","");
System::Console::WriteLine("Customer Code : {0} ",nav_->Value);
nav_->MoveToParent();
nav_->MoveToChild("custname","");
System::Console::WriteLine("Customer Name : {0} ",nav_->Value);
System::Console::WriteLine("\n");
}