简体   繁体   English

需要帮助,以使用xmltextWriter在C#中编写XML起始元素

[英]Need Help for writing an XML Start Element in C# using xmltextWriter

I write code like this 我这样写代码

  XmlDocument xdocMulticom = new XmlDocument();
  StringWriter strwMultiXml = new StringWriter();
  XmlTextWriter xmlMultiAirInfo = new XmlTextWriter(strwMultiXml);
  xmlMultiAirInfo.Formatting = Formatting.None;

  xmlMultiAirInfo.WriteStartDocument();
  xmlMultiAirInfo.WriteStartElement("ns", "cancelreservation", "http://www.opentravel.org/ota/2003/05");
  xmlMultiAirInfo.WriteStartElement("OTA_VehCancelRQ");
  xmlMultiAirInfo.WriteAttributeString("xmlns", "http://www.opentravel.org/ota/2003/05");
  xmlMultiAirInfo.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
  xmlMultiAirInfo.WriteAttributeString("Version", "1.002");
  xmlMultiAirInfo.WriteAttributeString("PrimaryLangID", "EN");
  xmlMultiAirInfo.WriteAttributeString("ReqRespVersion", "2.001");
  xmlMultiAirInfo.WriteStartElement("POS");
  xmlMultiAirInfo.WriteStartElement("Source");
  xmlMultiAirInfo.WriteStartElement("RequestorID");
  xmlMultiAirInfo.WriteAttributeString("Type", "4");
  xmlMultiAirInfo.WriteAttributeString("ID", "F0F4CCE4A9C24355");
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteStartElement("VehCancelRQCore");
  xmlMultiAirInfo.WriteAttributeString("CancelType", "Cancel");
  xmlMultiAirInfo.WriteStartElement("UniqueID");
  xmlMultiAirInfo.WriteAttributeString("Type", "14");
  xmlMultiAirInfo.WriteAttributeString("ID", "N2169641");
  xmlMultiAirInfo.WriteStartElement("PersonName");
  xmlMultiAirInfo.WriteElementString("GivenName", "Sandra");
  xmlMultiAirInfo.WriteElementString("Surname", "Jhonsan");
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteEndElement();                         
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteStartElement("VehCancelRQInfo");
  xmlMultiAirInfo.WriteStartElement("Vendor");
  xmlMultiAirInfo.WriteAttributeString("Code", "ZR");
  xmlMultiAirInfo.WriteEndElement();                          
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteEndElement();
  xmlMultiAirInfo.WriteEndElement();
  xdocMulticom.LoadXml(strwMultiXml.ToString());

which generates output like this: 生成如下输出:

<?xml version="1.0" encoding="utf-16"?>
<ns:cancelreservation xmlns:ns="http://www.opentravel.org/ota/2003/05">
  <OTA_VehCancelRQ xmlns="http://www.opentravel.org/ota/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.002" PrimaryLangID="EN" ReqRespVersion="2.001">
    <POS>
      <Source>
        <RequestorID Type="4" ID="F0F4CCE4A9C24355" />
      </Source>
    </POS>
    <VehCancelRQCore CancelType="Cancel">
      <UniqueID Type="14" ID="N2169641">
        <PersonName>
          <GivenName>Sandra</GivenName>
          <Surname>Jhonsan</Surname>
        </PersonName>
      </UniqueID>
    </VehCancelRQCore>
    <VehCancelRQInfo>
      <Vendor Code="ZR" />
    </VehCancelRQInfo>
  </OTA_VehCancelRQ>
</ns:cancelreservation>

Which is ok to me but i need it to be like this: 对我来说没关系,但我需要这样:

<?xml version="1.0" encoding="utf-16"?>
<ns:cancelreservation>
  <OTA_VehCancelRQ xmlns="http://www.opentravel.org/ota/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.002" PrimaryLangID="EN" ReqRespVersion="2.001">
    <POS>
      <Source>
        <RequestorID Type="4" ID="F0F4CCE4A9C24355" />
      </Source>
    </POS>
    <VehCancelRQCore CancelType="Cancel">
      <UniqueID Type="14" ID="N2169641">
        <PersonName>
          <GivenName>Sandra</GivenName>
          <Surname>Jhonsan</Surname>
        </PersonName>
      </UniqueID>
    </VehCancelRQCore>
    <VehCancelRQInfo>
      <Vendor Code="ZR" />
    </VehCancelRQInfo>
  </OTA_VehCancelRQ>
</ns:cancelreservation>

Is there any way to change it? 有什么办法可以改变吗?

As I See, difference only in namespace in first node... (or it's my mistake?) 如我所见,仅第一个节点的名称空间有所不同...(或者这是我的错误?)

Replace this line: 替换此行:

xmlMultiAirInfo.WriteStartElement("ns", "cancelreservation", "http://www.opentravel.org/ota/2003/05");

with this. 有了这个。

xmlMultiAirInfo.WriteStartElement("ns", "cancelreservation", "");

Well, C# is doing all right. 好吧,C#做得很好。 Because your element doesn't know about such prefix. 因为您的元素不知道这样的前缀。 In your sample, "cancelreservation" is not the root element, but if it will be root, xmlns attribute must be present. 在您的示例中,“ cancelreservation”不是根元素,但是如果它是根元素,则必须存在xmlns属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM