【问题标题】:Append XMLDocument to other将 XMLDocument 附加到其他
【发布时间】:2014-02-16 22:55:09
【问题描述】:

我有以下两个 xml 字符串

   <?xml version="1.0"?>
  <AccessRequest xml:lang='en-US'>
    <AccessLicenseNumber>YOURACCESSLICENSENUMBER</AccessLicenseNumber>
    <UserId>YOURUSERID</UserId>
    <Password>YOURPASSWORD</Password>
  </AccessRequest>

<?xml version="1.0" ?>
<RatingServiceSelectionRequest>                            
<PickupType>
  <Code>01</Code>
</PickupType>
<Shipment>
  <Description>Rate </Description>
  <Shipper>
    <Address>
      <PostalCode>originzip</PostalCode>
    </Address>
</Shipper>
<ShipTo>
  <Address>
    <PostalCode>destinationzip</PostalCode>
    <CountryCode>countrycode</CountryCode>
  </Address>
</ShipTo>
<Service>
  <Code>11</Code>
</Service>
<Package>
  <PackagingType>
    <Code>02</Code>
    <Description>Package</Description>
  </PackagingType>
  <Description>Rate Shopping</Description>
  <PackageWeight>
    <Weight>weight</Weight>
  </PackageWeight>
</Package>
<ShipmentServiceOptions/>
</Shipment>
</RatingServiceSelectionRequest>

我想将第二个 xml 字符串附加到第一个。我尝试将两个 XmlDocument 都写入 XmlWriter。但它会抛出异常“无法编写 XML 声明。XML 声明只能在文档的开头。”

Stream stm = req.GetRequestStream();
XmlDocument doc1 = new XmlDocument();
XmlDocument doc2 = new XmlDocument();


doc1.LoadXml(xmlData1);
doc2.LoadXml(xmlData2);

XmlWriterSettings xws = new XmlWriterSettings();
xws.ConformanceLevel = ConformanceLevel.Fragment;

using (XmlWriter xw = XmlWriter.Create(stm, xws))
{
  doc1.WriteTo(xw);
  doc2.WriteTo(xw);
}

如何按原样附加它?请帮忙

【问题讨论】:

  • 您在第一行有错字&lt;?xmlversion="1.0"?&gt; ... xmlversion 之间没有空格?
  • @coder.感谢您指出第一行的错字。我在发布问题时写错了。
  • @Alberto 我试过了。它将从 RatingServiceSelectionRequest 开始的第二个 xml 节点添加到 AccessRequest 节点。但我需要将它附加在 AccessRequest 节点之后而不会丢失 .

标签: c# .net


【解决方案1】:

在将第二个 xml 字符串附加到第一个 xml 字符串之前,从第二个 xml 字符串中删除 &lt;?xml version="1.0" ?&gt;

【讨论】:

  • 感谢您的回复。我无法从第二个 xml 字符串中删除 。我知道这是一个无效的 xml。但我需要它来调用 UPS Rating api。
  • 您可以从第二个字符串中删除它,但是您不能使用 XML 类,因为它们需要有效的 XML。
【解决方案2】:

我过去遇到过这个问题。下面的两行代码完成了这项工作:

var MyDoc = XDocument.Load("File1.xml");
MyDoc.Root.Add(XDocument.Load("File2.xml").Root.Elements());

如果您已经准备好字符串,请使用Parse 函数而不是Load

请注意,我使用的 System.Xml.Linq 使用 XDocument 而不是 XmlDocument 类。

编辑

据我了解,您需要按原样连接两个文档。问题在于它最终会导致无效的 XML 文档,原因有两个:

  • 文档将包含两个根节点:AccessRequestRatingServiceSelectionRequest。一个有效的 XML 文档只包含 一个 根节点。
  • 文档开头只能有一个&lt;?xml version="1.0" ?&gt; XML 声明。

如果您使用的 UPS api 输入了无效的 XML,很遗憾您不能使用 XML 对象。因此,您必须使用简单的字符串连接来实现您想要的:

var xml = xmlData1 + xmlData2;

【讨论】:

  • 它将从 RatingServiceSelectionRequest 开始的第二个 xml 节点附加到 AccessRequest 节点。但我需要在 AccessRequest 之后附加它。
  • 哦,我明白了。对不起,我错过了那部分。恐怕我建议的解决方案不会让你满意:-/
猜你喜欢
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多