【发布时间】:2009-07-09 15:15:59
【问题描述】:
我正在尝试访问 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);
【问题讨论】:
-
您可能希望发布发生错误的代码。否则,我们就像汽车修理工一样,在电话中被问到这样的问题:“我的车无法启动。出了什么问题?”
-
另外,你确定他们提供的这个例子是针对一个请求的吗?它看起来更像是两种不同类型的请求。第一个是请求访问,第二个是请求跟踪信息。
-
这正是他们的例子。我们在经典 ASP 中使用类似的东西,两个 xml 请求通过 Msxml2.ServerXMLHTTP 对象同时发送。
-
奇怪,但如果请求是以字符串形式出现的,那么他们可以很容易地将两个根节点解析为两个部分。 @VVS 和 @MrPeregrination 似乎都知道如何做到这一点。这是针对哪个 UPS 跟踪服务?不知道他们这样做了——我可能想用它。
-
Cyberherbalist - 它返回货件的状态...类似于您通过其网站跟踪 UPS 包装时看到的...它将向您显示它经过的城市和状态在那个位置
标签: c# xml xmldocument