Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取和修改xml文档中的子元素_C#_Xml_Web Services - Fatal编程技术网

C# 获取和修改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

这里有一个棘手的情况。我有一个返回XML文档的Web服务。此XML文档有一个名为
的根元素,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;