簡體   English   中英

C#XmlDocument節點

[英]C# XmlDocument Nodes

我正在嘗試訪問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);

XML文檔只能有一個根節點。 否則它的形成不好。 如果您需要一次發送兩個文檔,則需要創建2個xml文檔並將它們連接在一起。

它拋出異常是因為你試圖創建無效的xml。 XmlDocument只會生成格式良好的xml。

您可以使用XMLWriter並將XmlWriterSettings.ConformanceLevel設置為Fragment,或者您可以創建兩個XmlDocuments並將它們寫入同一個流中。

構建兩個單獨的XML文檔並連接它們的字符串表示形式。

看起來您的節點結構總是相同的。 (我沒有看到任何條件邏輯。)如果結構是常量,您可以定義XML模板字符串。 將該字符串加載到XML文檔中並執行SelectNode以填充單個節點。

這可能比以編程方式創建根,元素和節點更簡單/更清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM