在C#中的XML元素上保留冗余名称空间前缀

我正在尝试编写一个XML文件,该文件将被另一个服务拾取并解析。 为了实现这一点,XML必须以非常特定的方式进行格式化,即:

<?xml version="1.0"?>
<Feedbacks:Feedbacks xmlns:Feedbacks="Feedbacks">
  <Feedbacks:Elements>
    <Feedback:XMLFeedback xmlns:Feedback="Feedback">
      <Feedback:MfgUnitID></Feedback:MfgUnitID>
      <Feedback:MachineId></Feedback:MachineId>
      <Feedback:OperationCode></Feedback:OperationCode>
      <Feedback:ItemSeqNum></Feedback:ItemSeqNum>
      <Feedback:OperDispositionCd></Feedback:OperDispositionCd>
      <Feedback:ItemId></Feedback:ItemId>
      <Feedback:ParentItemId></Feedback:ParentItemId>
      <Feedback:ItemEndSize>1821</Feedback:ItemEndSize>
      <Feedback:ItemDispositionCd></Feedback:ItemDispositionCd>
      <Feedback:OperStartDate></Feedback:OperStartDate>
      <Feedback:OperEndDate></Feedback:OperEndDate>
    </Feedback:XMLFeedback>
  </Feedbacks:Elements>
</Feedbacks:Feedbacks>

数据当然在最里面的元素之间。 尽管如此,无论我做什么,我都无法获得任何C#类来将分号保留在最里面的节点上。 据我所知这些需要保留,那么在C#中有没有办法强制它通过这种方式来格式化节点? 我已经尝试了所有可以在XMLDocument类中找到的创建方法。 我可以将外部节点格式化得很好,但内部节点不断创建问题。

编辑,对不起,这里是构成内部节点的代码。

private void AppendFile(string filename, string[] headers, Dictionary<string, string> values)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        XmlNode node = doc.GetElementsByTagName(headers[headers.Length - 2]).Item(0);
        string[] hPieces = headers[headers.Length - 1].Split(':');
        XmlElement appendee = doc.CreateElement(hPieces[0].Trim(), hPieces[1].Trim(), hPieces[0].Trim());
        node.AppendChild(appendee);

        foreach (KeyValuePair<string, string> pair in values)
        {
            string[] ePieces = pair.Key.Split(':');
            //XmlElement element = doc.CreateElement(ePieces[0].Trim(), string.Empty, ePieces[1].Trim());
            //XmlText text = doc.CreateTextNode(pair.Value);
            XmlNode innerNode = doc.CreateNode(XmlNodeType.Element, ePieces[1].Trim(), ePieces[0].Trim());
            node.InnerText = pair.Value;
           // element.AppendChild(text);
            appendee.AppendChild(innerNode);
        }

        doc.Save(filename);
    }

内部节点的数据以字典中的键值对形式出现。 密钥包含预定名称的地方。

编辑2:这是文件输出的样子

<?xml version="1.0" encoding="utf-8"?>
<Feedbacks:Feedbacks xmlns:Feedbacks="Feedbacks">
  <Feedbacks:Elements>
    <Feedback:XMLFeedback xmlns:Feedback="Feedback">
      <MfgUnitID></MfgUnitID>
      <MachineId></MachineId>
      <OperationCode</OperationCode>
      <ItemSeqNum></ItemSeqNum>
      <OperDispositionCd></OperDispositionCd>
      <ItemId></ItemId>
      <ParentItemId></ParentItemId>
      <ItemEndSize></ItemEndSize>
      <ItemDispositionCd></ItemDispositionCd>
      <OperStartDate></OperStartDate>
      <OperEndDate></OperEndDate>
    </Feedback:XMLFeedback>
  </Feedbacks:Elements>
</Feedbacks:Feedbacks>

使用XLinq您可以轻松完成此任务:

using System.Xml.Linq;

     XNamespace ns1 = "Feedbacks";
     XNamespace ns2 = "Feedback";

     var doc = new XElement("Feedbacks", 
            new XAttribute(XNamespace.Xmlns+"Feedbacks", ns1));

     doc.Add(new XElement(ns1 + "Elements", 
            new XElement(ns2 + "Feedback", 
               new XAttribute(XNamespace.Xmlns+"Feedback", ns2),
               new XElement(ns2 + "Unit"))));

<Feedbacks xmlns:Feedbacks="Feedbacks">
  <Feedbacks:Elements>
    <Feedback:Feedback xmlns:Feedback="Feedback">
      <Feedback:Unit />
    </Feedback:Feedback>
  </Feedbacks:Elements>
</Feedbacks>

虽然我相信你自己的输出应该是有效的XML,依靠父级namespcae。

链接地址: http://www.djcxy.com/p/66001.html

上一篇: Keeping Redundant Namespace Prefixes On XML Elements in C#

下一篇: Declaring a custom android UI element using XML