为了账号安全,请及时绑定邮箱和手机立即绑定

XMLWriter 尝试使用重复属性

XMLWriter 尝试使用重复属性

C#
Qyouu 2022-07-23 17:05:48
更新:解决问题的更新问题是元素而不是属性,并添加了我的 XML 输出我必须向应用程序提供一些 XML 编码的字符串(我不经常使用标记语言,并且对它们的细微差别没有很多经验)。我需要发送的格式如下(我无法控制):<ROOT><Unit UnitName="Unit XYZ"><Scheds Qty="5" ProdId="214" Comments="" /><Scheds Qty="200" ProdId="125" Comments="Need by 1/23" /><Scheds Qty="5000" ProdId="3100" Comments="" /></Unit><Unit UnitName="Unit ABC"><Scheds Qty="5" ProdId="214" Comments="" /><Scheds Qty="200" ProdId="125" Comments="Need by 1/25" /><Scheds Qty="5000" ProdId="3100" Comments="" /></Unit></ROOT>我试图用它来写这个,XML Writer但我遇到了属性Scheds重复的问题。你可以在下面看到我在摆弄这个WriteString方法,但我相信我需要它作为一个属性。我的代码如下: //Top level root element                writer.WriteStartElement("ROOT");                //loop through list and determine the pu desc to create the xml element                foreach (Tuple<int, List<PLYOrder>> t in allOrders)                {                    var unit = PUList.Where(x => x.PUId == t.Item1).First().PUDesc.ToString();                    //Start each Unit as a new element                    writer.WriteStartElement("Unit");                    writer.WriteAttributeString("UnitName", unit);                    foreach(PLYOrder p in t.Item2)                    {                                              var qty = $"Qty=\"{p.Qty.ToString()}\"";                        var prodId = $"ProdId=\"{p.Product.Id.ToString()}\"";                        var Comments = $"Comments=\"{p.Comments}\"";                    writer.WriteStartElement("Scheds", qty);                    writer.WriteEndElement();                    writer.WriteStartElement("Scheds", prodId);                    writer.WriteEndElement();                    writer.WriteStartElement("Scheds", comments);                    writer.WriteEndElement();                    }                    writer.WriteEndElement();                }                writer.WriteEndElement();
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

看起来您使用WriteStartElement不正确。第二个参数不是属性,而是命名空间 URI。这是一个简单的例子


XmlWriterSettings settings = new XmlWriterSettings();

settings.Indent = true;

settings.OmitXmlDeclaration = true;

XmlWriter writer = XmlWriter.Create(Console.Out, settings);


writer.WriteStartElement("ROOT");


writer.WriteStartElement("Unit");

writer.WriteAttributeString("UnitName", "Unit XYZ");

writer.WriteEndElement();


writer.WriteStartElement("Scheds");

writer.WriteAttributeString("Qty", "5");

writer.WriteAttributeString("ProdId", "214");

writer.WriteAttributeString("Comments", "Need by 1/25");

writer.WriteEndElement();


// Write the close tag for the root element.

writer.WriteEndElement();

writer.Close(); 

这会产生以下输出:


<ROOT>

  <Unit UnitName="Unit XYZ" />

  <Scheds Qty="5" ProdId="214" Comments="Need by 1/25" />

</ROOT>

因此,从您的示例来看,它将是:


foreach(PLYOrder p in t.Item2)

    writer.WriteStartElement("Scheds");

    writer.WriteAttributeString("Qty", p.Qty.ToString());

    writer.WriteAttributeString("ProdId", p.Product.Id.ToString());

    writer.WriteAttributeString("Comments", p.Comments);

    writer.WriteEndElement();

}


查看完整回答
反对 回复 2022-07-23
?
绝地无双

TA贡献1946条经验 获得超4个赞

XML 中不能有重复的属性。

您在示例输出中没有重复的属性,您有重复的元素,这是允许的。将元素的开头写在Scheds元素处理的开头和WriteEndElement()结尾,你应该没问题。


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信