阅读Xdocument的Insde

时间:2017-12-05 16:46:36

标签: c# linq-to-xml

大家好我可能做错了但是我试图在xml文档中获取内部元素,每次我尝试for循环时它似乎都会一次性返回所有内容

示例xml

<RStream> 
  <CmdResponse>
  </CmdResponse> 
  <TranResponse>
    <ProductData> 
      <ProductCat1>02</ProductCat1> 
      <ProductSubCat1>000</ProductSubCat1>
      <ProductQty1>32.00</ProductQty1> 
      <ProductCat2>03</ProductCat2> 
      <ProductSubCat2>000</ProductSubCat2> 
      <ProductQty2>72.00</ProductQty2> 
    </ProductData>
  </TranResponse>
</RStream>

foreach (XElement element in doc.Descendants("ProductData"))
{
    MessageBox.Show(element.Name.ToString());
    MessageBox.Show(element.Value);
}

我得到了ProductData的回复

的回应

enter image description here

我试图在循环中得到一个响应,告诉我 ProductCat1然后02 依此类推,ProductData

中可能会有无限数量的回复

2 个答案:

答案 0 :(得分:1)

您必须对foreach的子子项使用其他ProductData

试试这个例子:

foreach (XElement element in doc.Descendants("ProductData"))
{
    foreach (XElement subElement in element.Elements())
    {
        Debug.WriteLine(subElement.Name.ToString());
        Debug.WriteLine(subElement.Value);
    }
}

希望这有帮助

答案 1 :(得分:1)

通过使用带有断点的Visual Studio调试器,可以轻松解决此问题。这样做,您可以检查变量element的值,即此

<ProductData>
  <ProductCat1>02</ProductCat1>
  <ProductSubCat1>000</ProductSubCat1>
  <ProductQty1>32.00</ProductQty1>
  <ProductCat2>03</ProductCat2>
  <ProductSubCat2>000</ProductSubCat2>
  <ProductQty2>72.00</ProductQty2>
</ProductData>

为了获得你想要的东西,你需要这个修改过的代码:

foreach (XElement element in doc.Descendants("ProductData"))
{
    foreach (var xElement in element.Elements())
    {
        MessageBox.Show(xElement.Name.ToString());
        MessageBox.Show(xElement.Value);
    }
}