这是一个棘手的情况。我有一个返回 XML 文档的 web 服务。此 XML 文档有一个称为<Entities .... >
Entities 元素的根元素,它有一个称为 的子元素<Article..>
。我需要修改 Article 的其中一个子元素,并将每个 article 元素“PUT”回 Web 服务。我不能用 Entities 发布整个文档的原因是 Web 服务无法将 Entities 识别为对象,我无法对其执行更新操作。
以下是收到的文件的结构:
<Entities>
<Article id="1">
<Permissions>
<Sla id="1">
<name> first sla </name>
</Sla>
</Permissions>
</Article>
<Article id="2">
<Permissions>
<Sla id="2">
<name> second sla </name>
</Sla>
</Permissions>
</Article>
</Entities>
下面是我用来完成这个技巧的代码,但我可以获取 Sla 元素。我需要做的是获取每篇文章中的 Sla 元素并检查其 id 属性。如果检查成功,我需要删除该 Sla 元素及其所有子元素。这是我到目前为止所做的:
int pageNumber = 1;
bool entities = true;
while (entities)
{
url = "www.myurl.com";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "Get";
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
doc.Load(rep.GetResponseStream());
rep.Close();
if (doc != null)
{
XmlNodeList nodes = doc.SelectNodes("/Entities/Article");
foreach (XmlNode node in nodes)
{
XmlNode Slanode = null;
try
{
Slanode = doc.SelectSingleNode("Permissions/Sla[@id='" + sla.ToString() + "']");
Slanode.ParentNode.RemoveChild(node);
string finalXML = doc.OuterXml;
HttpWebRequest reqToUpdate = (HttpWebRequest)WebRequest.Create(url);
reqToUpdate.ContentType = "text/xml; encoding=UTF-8";
reqToUpdate.Method = "PUT";
byte[] bytes = new UTF8Encoding().GetBytes(finalXML);
reqToUpdate.ContentLength = bytes.Length;
Stream data = reqToUpdate.GetRequestStream();
data.Write(bytes, 0, bytes.Length);
data.Close();
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
pageNumber++;
}
else
entities = false;
}
}
我无法让代码工作,因为当我到达
Slanode = doc.SelectSingleNode("Permissions/Sla[@id='" + sla.ToString() + "']");
它不填充 Slanode 并返回 null,当我在调试模式下检查节点时,列表显示以下错误:
Only one top level element is allowed in an XML document. Error processing resource
任何帮助将不胜感激。
谢谢