C# 是否可以从生成的xml中删除关系列
嗨,我正在通过下面的代码创建我的xmlC# 是否可以从生成的xml中删除关系列,c#,asp.net,xml,xml-parsing,dataset,C#,Asp.net,Xml,Xml Parsing,Dataset,嗨,我正在通过下面的代码创建我的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); dataAd
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数据表中删除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>
新版本和旧版本(2.0)的问题解决更新2
新版本和旧版本(2.0)的问题解决更新3
您可以从数据集中获取xml,然后执行第二步删除OrderNumber元素。确保使用
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("~/") + ......);
string xml=“35469901/09/2018 3546991test240testEye®22.953546991test-32.95”;
XDocument doc=XDocument.Parse(xml);
doc.substands(“OrderNumber”).Remove();
doc.Save(Server.MapPath(“~/”+……);
您可以做您正在做的事情,然后使用Linq将xml转换为您想要的xml或任何xml API。您能简单地给出答案吗,我对如何创建是新手,我正在使用ado.net代码获取数据datatable@Crowcoder请检查我的更新代码以创建xml。你可以添加一个小样本的xml吗?它会是你想要的样子吗?@Crowcoder我已经用样本xml更新了问题,我需要删除注释为的OrderNumber(//需要删除或隐藏)XDocument的名称空间是什么?您想让我做一些事情,比如string xml=convert.tostring(ds.WriteXml);XDocument
在System.xml.Linq
中。您可以使用ds.GetXml()
而不是WriteXml()
以字符串形式获取xml。我已从System.xml.Linq.dll的path STAIL命名空间下载System.xml.Linq.dll。Linq未调用您不需要下载任何内容,它包含在.Net framework中。您应该删除下载内容的引用。如果键入“System.xml.Linq.XDocument”你没有任何智能感知?你现在也应该扫描你的电脑,看看有没有病毒。
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");
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");
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("~/") + ......);