這是一個棘手的情況。我有一個返回XML文檔的web服務。此XML文檔具有一個稱爲<Entities .... >
的根元素。實體元素具有名爲<Article..>
的子元素。我需要修改文章的一個子元素,並將每個文章元素「放」回web服務。我無法使用實體發佈整個文檔的原因是因爲web服務無法將實體識別爲對象,我無法對其執行更新操作。在xml中獲取和修改子元素文檔
下面是文檔的結構獲得:
<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
任何幫助將是不勝感激。
感謝