通过 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
值。
我只想将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
值。