是否可以从生成的xml中删除“关系”列

时间:2018-01-10 12:35:12

标签: 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);
 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");

1 个答案:

答案 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("~/") + ......);