C#的XmlDocument节点(C# XmlDocument Nodes)

2019-06-25 12:01发布

我试图访问UPS跟踪信息,并按照他们的榜样,我需要建立像这样的请求:

<?xml version="1.0" ?>
<AccessRequest xml:lang='en-US'>
   <AccessLicenseNumber>YOURACCESSLICENSENUMBER</AccessLicenseNumber>
   <UserId>YOURUSERID</UserId>
   <Password>YOURPASSWORD</Password>
</AccessRequest>
<?xml version="1.0" ?>
<TrackRequest>
   <Request>
     <TransactionReference>
         <CustomerContext>guidlikesubstance</CustomerContext>
     </TransactionReference>
     <RequestAction>Track</RequestAction>
   </Request>
   <TrackingNumber>1Z9999999999999999</TrackingNumber>
</TrackRequest>

我在用C#1周的XmlDocument创建这是一个问题。 当我尝试添加第二个: <?xml version="1.0" ?> or the <TrackRequest>它抛出一个错误:

System.InvalidOperationException:此文档已经有了一个“DocumentElement”节点。

我猜这是因为标准的XmlDocument只会有1个根节点。 有任何想法吗?

继承人我到目前为止的代码:

XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
XmlElement rootNode = xmlDoc.CreateElement("AccessRequest");
rootNode.SetAttribute("xml:lang", "en-US");
xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);
xmlDoc.AppendChild(rootNode);

XmlElement licenseNode = xmlDoc.CreateElement("AccessLicenseNumber");
XmlElement userIDNode = xmlDoc.CreateElement("UserId");
XmlElement passwordNode = xmlDoc.CreateElement("Password");

XmlText licenseText = xmlDoc.CreateTextNode("mylicense");
XmlText userIDText = xmlDoc.CreateTextNode("myusername");
XmlText passwordText = xmlDoc.CreateTextNode("mypassword");

rootNode.AppendChild(licenseNode);
rootNode.AppendChild(userIDNode);
rootNode.AppendChild(passwordNode);

licenseNode.AppendChild(licenseText);
userIDNode.AppendChild(userIDText);
passwordNode.AppendChild(passwordText);

XmlElement rootNode2 = xmlDoc.CreateElement("TrackRequest");
xmlDoc.AppendChild(rootNode2);

Answer 1:

一个XML文档只能曾经有一个根节点。 否则,它不能很好地形成。 您将需要创建2个XML文档和它们连接起来,如果你需要在一次同时发送。



Answer 2:

它抛出一个异常,因为你要创建无效的XML。 XmlDocument的只会产生良好的XML。

你可以使用它的XMLWriter的并设置XmlWriterSettings.ConformanceLevel进行分段做,或者你可以创建两个XmlDocuments并把它们写出来到同流。



Answer 3:

建立两个单独的XML文档并连接它们的字符串表示。



Answer 4:

它看起来像你的节点结构始终是相同的。 (我没有看到任何条件逻辑。)如果结构是不变的,你可以定义XML模板字符串。 加载字符串转换成XML文档和做SelectNode填充单个节点。

可能比编程创建根,元素&节点简单/清洁剂。



文章来源: C# XmlDocument Nodes