【问题标题】:Is it possible to remove Relations column from generated xml是否可以从生成的 xml 中删除关系列
【发布时间】:2018-06-19 15:14:09
【问题描述】:

您好,我正在通过以下代码创建我的 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");

【问题讨论】:

  • 你可以做你正在做的事情,然后使用 Linq 将 xml 转换为你想要的方式到 XML 或任何 XML API。
  • 你能简单地给出答案吗,我是如何创建的新手,我正在使用 ado.net 代码来获取数据表中的数据
  • @Crowcoder 请检查我的更新代码以创建 xml
  • 您能否添加一小部分您获得的 xml 以及您想要的样子?
  • @Crowcoder 我已经用示例 xml 更新了问题,我需要删除 OrderNumber 注释为(//需要删除或隐藏)

标签: c# asp.net xml xml-parsing dataset


【解决方案1】:

您可以从 DataSet 中获取 xml,然后执行第二步删除 OrderNumber 元素。确保为System.Xml.Linq 添加using

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

【讨论】:

  • XDocument 的命名空间是什么?你想让我做一些事情,比如 string xml = convert.tostring(ds.WriteXml);
  • XDocumentSystem.Xml.Linq 中。您可以使用 ds.GetXml() 而不是 WriteXml() 来获取 xml 作为字符串。
  • 我已经从路径dllme.com/dll/download/6428/System.Xml.Linq.dll 下载了 System.Xml.Linq.dll 仍然没有调用 system.xml.linq 的命名空间
  • 您不需要下载任何东西,它包含在 .Net 框架中。您应该删除您下载的内容的参考。如果您键入“System.Xml.Linq.XDocument.”,您不会得到任何智能感知?
  • 您现在还应该扫描您的电脑以查找病毒。
猜你喜欢
  • 2011-11-11
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多