2009-07-09 56 views
3

我試圖訪問UPS跟蹤信息,並按照他們的榜樣,我需要建立像這樣的請求:C#的XmlDocument節點

<?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> 

我有1 XmlDocument的創建這是一個問題C#。當我嘗試添加第二個: <?xml version="1.0" ?> or the <TrackRequest> 它拋出一個錯誤:

System.InvalidOperationException: This document already has a 'DocumentElement' node.

我猜這是因爲標準的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); 
+0

您可能想要將代碼發佈到發生錯誤的位置。否則,我們就像汽車維修技工一樣,通過電話詢問問題:「我的車不會啓動,有什麼問題?」 – Cyberherbalist 2009-07-09 15:17:52

回答

9

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

0

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

2

它拋出一個異常,因爲你試圖創建無效的XML。 XmlDocument只會生成格式良好的xml。

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

0

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

這可能比編程式創建根節點元素&更簡單/更清潔。

相關問題