我正在尝试使用以下格式生成XML:
<ImportSession>
<Batches>
<Batch>
<BatchFields>
<BatchField Name="Field1" Value="1" />
<BatchField Name="Field2" Value="2" />
<BatchField Name="Field3" Value="3" />
</BatchFields>
<Batch>
<Batches>
</ImportSession>
我有以下代码:
XmlDocument doc = new XmlDocument();
XmlElement importSession = doc.CreateElement("ImportSession");
XmlElement batches = doc.CreateElement("Batches");
XmlElement batch = doc.CreateElement("Batch");
XmlElement batchFields = doc.CreateElement("BatchField");
doc.AppendChild(importSession);
XmlNode importSessionNode = doc.FirstChild;
importSessionNode.AppendChild(batches);
XmlNode batchesNode = importSessionNode.FirstChild;
batchesNode.AppendChild(batch);
XmlNode batchNode = batchesNode.FirstChild;
int numBatchFields = 9;
for (int j = 0; j < numBatchFields; j++)
{
batchNode.AppendChild(batchFields);
XmlElement batchfields = (XmlElement)batchNode.FirstChild;
batchfields.SetAttribute("Name", "BatchPrevSplit");
batchfields.SetAttribute("Value", j.ToString());
}
我的问题是它没有添加批处理字段标记。它增加一个,所以我得到:
<ImportSession>
<Batches>
<Batch>
<BatchField Name="BatchPrevSplit" Value="8" />
</Batch>
</Batches>
</ImportSession>
似乎是因为我试图将相同的Child元素添加到batchNode节点,它只是覆盖现有标记中的数据。 我试过放入
XmlElement batchfields = (XmlElement)batchNode.ChildNodes.Item(j);
而不是
XmlElement batchfields = (XmlElement)batchNode.FirstChild;
但如果我使用相同的元素,那么它不会将另一个Child附加到batchNode,因此只有一个子节点。那么有人能告诉我如何实现这一目标吗?
答案 0 :(得分:3)
像这样重写你的for
循环:
for (int j = 0; j < numBatchFields; j++)
{
XmlElement batchFields = doc.CreateElement("BatchField");
batchFields.SetAttribute("Name", "BatchPrevSplit");
batchFields.SetAttribute("Value", j.ToString());
batchNode.AppendChild(batchFields);
}
答案 1 :(得分:3)
LINQ to XML将为您带来痛苦......
var xml = new XElement("ImportSession",
new XElement("Batches",
new XElement("Batch",
new XElement("BatchFields",
from j in Enumerable.Range(0,9)
select new XElement("BatchField",
new XAttribute("Name", string.Format("Field{0}", j)),
new XAttribute("Value", j)
)
)
)
)
);