我正在尝试遍历 Xml 文件并在消息中显示类型的值。但我的代码反复给他第一个记录值。
下面是我的 XML
<Request deploymentMode="test">
<ConfirmationRequest>
<ConfirmationHeader noticeDate="2019-10-03T01:53:54+0200" type="accept" operation="new" confirmID="0002933085">...</ConfirmationHeader>
<OrderReference orderID="50084">...</OrderReference>
<ConfirmationItem lineNumber="000010" quantity="16.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<ConfirmationStatus type="rejected" quantity="16.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<Comments>ConfirmedQuantity:0.000</Comments>
<Comments>reject reason: EDI 855 Rejected: Out of Stock</Comments>
</ConfirmationStatus>
</ConfirmationItem>
<ConfirmationItem lineNumber="000020" quantity="144.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<ConfirmationStatus deliveryDate="2019-10-02T07:00:00+0200" type="accepted" quantity="144.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<Comments>ConfirmedQuantity:144.000</Comments>
</ConfirmationStatus>
</ConfirmationItem>
<ConfirmationItem lineNumber="000030" quantity="45.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<ConfirmationStatus deliveryDate="2019-10-02T07:00:00+0200" type="partial-accept" quantity="45.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<Comments>ConfirmedQuantity:45.000</Comments>
<Comments>Partial Accept reason -Out of Stock etc.</Comments>
</ConfirmationStatus>
</ConfirmationItem>
<ConfirmationItem lineNumber="000040" quantity="65.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<ConfirmationStatus deliveryDate="2019-10-02T07:00:00+0200" type="accepted" quantity="65.000">
<UnitOfMeasure>CT</UnitOfMeasure>
<Comments>ConfirmedQuantity:65.000</Comments>
</ConfirmationStatus>
</ConfirmationItem>
</ConfirmationRequest>
</Request>
我的代码如下。
XmlNodeList xnList = xmlDoc.SelectNodes("//ConfirmationRequest/ConfirmationItem");
foreach (XmlNode xn in xnList)
{
OrderNumber = null;
LineNumber = 0;
Quantity = 0;
UnitOfMeasure = null;
DeliveryDate = null;
Type = null;
ConfirmationStatus_Quantity = 0;
ConfirmationStatus_Unitofmeasure = null;
LineitemComments_1 = null;
LineitemComments_2 = null;
LineitemComments_3 = null;
LineitemComments_4 = null;
LineitemComments_5 = null;
CreatedDate = null;
XmlNode orh = xmlDoc.SelectSingleNode("//Request/ConfirmationRequest/OrderReference");
OrderNumber = (orh.Attributes["orderID"].Value == null) ? null : orh.Attributes["orderID"].Value;
LineNumber = int.Parse(xn.Attributes[0].Value == null ? null : xn.Attributes[0].Value);
Quantity = Convert.ToDecimal(xn.Attributes[1].Value == null ? null : xn.Attributes[1].Value);
UnitOfMeasure = xn.SelectSingleNode("UnitOfMeasure").InnerText == null ? null : xn.SelectSingleNode("UnitOfMeasure").InnerText;
DeliveryDate = xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@deliveryDate").InnerText == null ? null : xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@deliveryDate").InnerText;
DeliveryDate = DeliveryDate.Substring(0, 10);
Type = xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@type").InnerText == null ? null : xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@type").InnerText;
}
在每次迭代中,我都得到了几乎所有的值,除了
- ConfirmationStatus 标记的属性字符串 DeliveryDate。
- ConfirmationStatus 标记的属性字符串类型。
交付日期和类型不会随着每次迭代而改变。
我得到的每个循环都低于结果。
循环 -1: DeliveryDate:2019-10-02T07:00:00+0200,类型 = 拒绝。
循环 -2: DeliveryDate:2019-10-02T07:00:00+0200,类型 = 拒绝。
循环 -3: DeliveryDate:2019-10-02T07:00:00+0200,类型 = 拒绝。
循环 -4: DeliveryDate:2019-10-02T07:00:00+0200,类型 = 拒绝。
您可以在哪里看到这些类型的值对于每个循环都是不同的,并且循环 1 没有交付日期。
我环顾了相关的解决方案,找不到任何解决方案。
回答
弄清楚我到底在哪里犯了错误。
我应该使用
**xn.SelectSingleNode("ConfirmationStatus/@deliveryDate").InnerText**
**xn.SelectSingleNode("ConfirmationStatus/@type").InnerText**
代替
xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@deliveryDate").InnerText
xn.SelectSingleNode("//Request/ConfirmationRequest/ConfirmationItem/ConfirmationStatus/@type").InnerText
上面的语句总是第一次出现,因此我只得到相同的值。**
不确定我是否在某个地方犯了错误。
请建议。
谢谢。