通过 Xpath 搜索 Xml NodeList 并在嵌套的 GridView 中绑定

Search Xml NodeList By Xpath and Bind In nested GridView

我只想将xml绑定到像这样的多个子节点的gridview中..

<?xml version="1.0" encoding="utf-8" ?>
<Products>
<Product>
    <SKU>DL-DL4002</SKU>
    <Name>Leopard Print Strapless Corset Top with G-string</Name>
    <ImagePath4>
      http://da.com/images/product/large/DL-DL4002_4_.jpg
    </ImagePath4>
    <Variants>
      <Variant>
        <Size>S</Size>
        <Cost>25.28</Cost>
        <MSRP>57.45</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>M</Size>
        <Cost>25.28</Cost>
        <MSRP>57.45</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>L</Size>
        <Cost>25.28</Cost>
        <MSRP>57.45</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>XL</Size>
        <Cost>25.28</Cost>
        <MSRP>57.45</MSRP>
        <Avialability>out of stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
    </Variants>
  </Product>
  <Product>
    <SKU>DL-DL4003</SKU>
    <Name>Designer Purple Brocade Party Corset Top</Name>

    <ImagePath4>
      http://da.com/images/product/large/DL-DL4003_4_.jpg
    </ImagePath4>
    <Variants>
      <Variant>
        <Size>S</Size>
        <Cost>23.1</Cost>
        <MSRP>52.5</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>M</Size>
        <Cost>23.1</Cost>
        <MSRP>52.5</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>L</Size>
        <Cost>23.1</Cost>
        <MSRP>52.5</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
      <Variant>
        <Size>XL</Size>
        <Cost>23.1</Cost>
        <MSRP>52.5</MSRP>
        <Avialability>in stock</Avialability>
        <Weight>0.6</Weight>

      </Variant>
    </Variants>
  </Product>
</Products>

,当我像那样将其与 gridview 绑定时就可以了

 XmlDocument xmldoc = new XmlDocument();
  xmldoc.Load(Server.MapPath("~/XML/XM.xml"));
  XmlNodeList nodeList = xmldoc.SelectNodes("/Products/Product");

     foreach (XmlNode node in nodeList)
                {
                     DataRow dtrow = dt.NewRow();
                    dtrow["SKU"] = node["SKU"].InnerText;
                }

没问题,但是当我将嵌套的 gridview 绑定到 gridview For Varients on Row DataBound 时

就这样,

protected void GridXML_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

            GridView gv = (GridView)e.Row.FindControl("gvChildGrid");
            DataTable dt = new DataTable();
        XmlNodeList nodeList = xmldoc.DocumentElement.SelectNodes("/Products/Product/Variants/Variant");
        }
}

它会 Select 两个对象的所有变体节点,即 Prodct SkU ID =DL-DL4000 和 DL-DL4002 但我只想要 Select 只有一个对象,即一个一个

请帮忙

基本上,您可以使用 xpath 谓词 ([]) 来根据特定条件过滤元素。例如:

string sku = "DL-DL4002";
string xpath = String.Format("/Products/Product[SKU='{0}']/Variants/Variant", sku);
XmlNodeList nodeList = xmldoc.DocumentElement
                             .SelectNodes(xpath);

以上示例将从 Product return Variant 得到 SKU 等于 "DL-DL4002"。我不熟悉 ASP.NET gridview,但您应该能够从 e.Row 参数获取当前 SKU 值。