从webservice读取XML根据其属性的值删除子元素并将其写回

时间:2012-07-27 04:32:39

标签: c# xml web-services

让我们说以下是我使用此代码从我的webservice收到的xml输入:

string url = txtURL.Text;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
XmlDocument doc = new XmlDocument();
doc.Load(rep.GetResponseStream());
rep.Close();

现在我在“doc”

中有以下xml文档
<note>
<parent_element>
<child_element attribute_1="1">
<inner_element> first Text </inner_element>
</child_element>
<child_element attribute_1="2">
<inner_element> second Text </inner_element>
</child_element>
</parent_element>
</note>

现在我想根据其属性值删除第一个子元素。因此,如果子元素的属性值为“1”,那么我想删除“child_element”及其所​​有子元素。所以我的最终结果应该是这样的:

<note>
<parent_element>
<child_element attribute_1="2">
<inner_element> second Text </inner_element>
</child_element>
</parent_element>
</note>

删除元素后,我会将其写回webservice。我知道我要求很多,但到目前为止还没能弄清楚。 我会包含我的代码,但由于我是xml操作的新手,我认为这将毫无用处(悲伤的表情)。任何帮助或指示将不胜感激。

谢谢你们。

1 个答案:

答案 0 :(得分:0)

首先:doc.load(txtURL.Text)足以从远程位置加载XML。

您可以删除这样的节点:

XmlDocument doc = new XmlDocument();
doc.Load(filename);

//Select node that needs to be deleted
XmlNode node = doc.SelectSingleNode("/note/parent_element/child_element[@attribute_1 = '1']");
node.ParentNode.RemoveChild(node);

如何将所有内容写回Web应用程序取决于它的期望。我将附上一个针对RESTful Web服务发布XML文件的示例

WebRequest req = WebRequest.Create(updateURL);

req.ContentType = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.Default.GetBytes(xmldoc);
req.ContentLength = bytes.Length;

Stream data = req.GetRequestStream();

data.Write(bytes, 0, bytes.Length);
data.Close();