XDocument>元素设置值

本文关键字:设置 元素 XDocument | 更新日期: 2023-09-27 18:04:12

我正在尝试设置/更改" topposition "的值。我有以下xml(修改);

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <WorkList xmlns="http://bb.someplace.com/websvcs">
         <profile>
            <userName>Bob</userName>
         </profile>
         <dataFilter>
            <Location>
               <String>Downtown</String>
            </Location>
         </dataFilter>
         <attrFilter>
            <cityState>1</cityState>
         </attrFilter>
         <fromPosition>0</fromPosition>
         <toPosition>100</toPosition>
      </WorkList>
   </soapenv:Body>
</soapenv:Envelope>

我有以下代码;

XDocument xml = XDocument.Load(@"C:''Test.xml");
XNamespace ns = xml.Root.Name.Namespace;
XElement elm = xml.Root.Element(ns + "Body");
// Works to this point
XElement elm2 = xml.Element("WorkList");
elm2.Element("toPosition").Value = "50";
//elm2 returns a null

我尝试了许多不同的代码变体,这些代码变体在许多关于这个主题的帖子中都有建议,但我一直没有成功。

请帮忙!TIA . .

XDocument>元素设置值

Element只获取与指定名称匹配的第一个直接子元素。你想要一个嵌套3层深的元素。Descendants将递归地读取与名称匹配的所有子元素,因此这通常是在文档中任何位置查找元素的最简单方法。

您需要考虑的第二件事是名称空间。toPosition的命名空间为继承父命名空间的默认命名空间。父命名空间中的默认命名空间声明由xmlns属性声明。

那么,把这些放在一起:

XNamespace ns = "http://bb.someplace.com/websvcs";
var element = doc.Descendants(ns + "toPosition").Single();
element.Value = "50";
相关文章: