您好我正在通过以下代码创建我的xml
DataSet ds = new DataSet("OrderDetail");
DataTable Detail = new DataTable("Detail");
DataTable Items = new DataTable("Items");
string query = "Some Query";
SqlDataAdapter dataAdapt = new SqlDataAdapter(query , conn);
dataAdapt.Fill(Detail);
ds.Tables.Add(Detail);
string loopingquery = "Some Query";
SqlDataAdapter dataAdapt1 = new SqlDataAdapter(loopingquery, conn);
dataAdapt1.Fill(Items);
ds.Tables.Add(Items);
DataRelation relation = ds.Relations.Add("relation", ds.Tables["Detail"].Columns["OrderNumber"], ds.Tables["Items"].Columns["OrderNumber"]);
relation.Nested = true;
ds.WriteXml(Server.MapPath("~/") + Detail.Rows[0]["OrderNumber"] + "_XML.xml");
但是我需要在生成xml之前从 Items DataTable 中删除 OrderNumber列 。
我曾尝试将列删除为
ds.Tables["Items"].Columns.Remove("OrderNumber");
但它正在以
为例无法删除关系列。
我该怎么做呢,是否可以隐藏OrderNumber列。或者还有其他方式吗?
XML示例
<OrderDetail>
<Detail>
<OrderNumber>354699</OrderNumber>
<OrderDate>01/09/2018</OrderDate>
<Items>
<OrderNumber>354699</OrderNumber> //Need to remove or hide
<Quantity>1</Quantity>
<Sku>test240</Sku>
<Item>testEye®</Item>
<Price>22.95</Price>
</Items>
<Items>
<OrderNumber>354699</OrderNumber> //Need to remove or hide
<Quantity>1</Quantity>
<Sku />
<Item>test</Item>
<Price>-32.95</Price>
</Items>
</Detail>
</OrderDetail>
您可以从下面选择任何一种方法从XML中删除节点
问题已解决新版本的更新1
Using System.XML.Linq; (NameSpace)
string xml = ds.GetXml();
XDocument doc = XDocument.Parse(xml);
doc.Descendants("OrderNumbers").Remove();
doc.Save(Server.MapPath("~/") + "XMLGeneration.xml");
问题已解决的更新2适用于新旧版本(2.0)
Using System.XML; (NameSpace)
string str = Convert.ToString(ds.GetXml());
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(str);
XmlNodeList nodes = xmlDoc.GetElementsByTagName("Items");
foreach (XmlNode node in nodes)
{
node.RemoveChild(node.SelectSingleNode("//OrderNumbers"));
}
xmlDoc.Save(Server.MapPath("~/") + "XMLGeneration.xml");
问题已解决的更新3适用于新版本和旧版本(2.0)
Using System.XML; (NameSpace)
ds.WriteXml(Server.MapPath("~/") + "XMLGeneration.xml");
xmlDoc.Load(Server.MapPath("~/") + "XMLGeneration.xml");
XmlNodeList nodes = xmlDoc.SelectNodes("//Items");
foreach (XmlNode node in nodes)
{
node.RemoveChild(node.SelectSingleNode("//OrderNumbers"));
}
xmlDoc.Save(Server.MapPath("~/") + "XMLGeneration.xml");
答案 0 :(得分:1)
您可以从DataSet中获取xml,然后执行第二步以删除OrderNumber元素。请务必为using
添加System.Xml.Linq
。
string xml = "<OrderDetail><Detail><OrderNumber>354699</OrderNumber><OrderDate>01/09/2018</OrderDate> <Items><OrderNumber>354699</OrderNumber><Quantity>1</Quantity><Sku>test240</Sku><Item>testEye®</Item><Price>22.95</Price></Items><Items><OrderNumber>354699</OrderNumber><Quantity>1</Quantity><Sku /><Item>test</Item><Price>-32.95</Price></Items></Detail></OrderDetail>";
XDocument doc = XDocument.Parse(xml);
doc.Descendants("OrderNumber").Remove();
doc.Save(Server.MapPath("~/") + ......);