ここでちょっと厄介な状況です。XML ドキュメントを返す Web サービスがあります。この XML ドキュメントには、 というルート要素があります。<Entities .... >
エンティティ要素には、 という子要素があり<Article..>
ます。Article の子要素の 1 つを変更し、各 article 要素を Web サービスに「PUT」する必要があります。エンティティを含むドキュメント全体を投稿できないのは、Web サービスがエンティティをオブジェクトとして認識せず、更新操作を実行できないためです。
以下は、受け取ったドキュメントの構造です。
<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() + "']");
デバッグ モードでノードを確認すると、リストに次のエラーが表示されていました。
Only one top level element is allowed in an XML document. Error processing resource
どんな助けでも大歓迎です。
ありがとう