C# 获取和修改xml文档中的子元素
这里有一个棘手的情况。我有一个返回XML文档的Web服务。此XML文档有一个名为C# 获取和修改xml文档中的子元素,c#,xml,web-services,C#,Xml,Web Services,这里有一个棘手的情况。我有一个返回XML文档的Web服务。此XML文档有一个名为的根元素,Entities元素有一个名为的子元素。我需要修改文章的一个子元素,并将每个文章元素“放”回Web服务。我无法发布包含实体的整个文档的原因是,webservice无法将实体识别为对象,并且我无法对其执行更新操作 收到的文件结构如下: <Entities> <Article id="1"> <Permissions> <Sla id="1"&g
的根元素,Entities元素有一个名为
的子元素。我需要修改文章的一个子元素,并将每个文章元素“放”回Web服务。我无法发布包含实体的整个文档的原因是,webservice无法将实体识别为对象,并且我无法对其执行更新操作
收到的文件结构如下:
<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>
我无法让代码工作,因为当我到达
Slanode=doc.SelectSingleNode(“权限/Sla[@id='”+Sla.ToString()+“]”)代码>
它不填充Slanode,并返回null,当我在调试模式下检查节点时,列表显示以下错误:
XML文档中只允许有一个顶级元素。处理资源时出错
任何帮助都将不胜感激
谢谢路径错误
Slanode = doc.SelectSingleNode("Permissions/Sla[@id='" + sla.ToString() + "']");
应该是
Slanode = node.SelectSingleNode("Permissions/Sla[@id='" + sla.ToString() + "']");
我想。我将用XElement重新编写它,希望它对您有用,因为XElement是我所理解的
首先获取要删除的文章:
XElement root = XElement.Load(stream);
XElement articleToRemove = root.XPathSelectElement("//Article[Permissions/Sla/@id='"+sla.ToString()+"']");
if(null != articleToRemove)
articleToRemove.Remove();
要使循环可读,请创建Put函数:
private void Put(XElement article)
{
Stream data = null;
try
{
string finalXML = article.ToString(SaveOptions.DisableFormatting);
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;
data = reqToUpdate.GetRequestStream();
data.Write(bytes, 0, bytes.Length);
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
finally
{
if (null != data)
data.Close();
}
}
然后获取其余文章并上传:
root.Descendants("Article").ToList().ForEach(a => Put(a));
编辑:要将XPath与XElement一起使用,需要使用以下命令:
using System.Xml.XPath;
using System.Xml.XPath;