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 . .
Element
只获取与指定名称匹配的第一个直接子元素。你想要一个嵌套3层深的元素。Descendants
将递归地读取与名称匹配的所有子元素,因此这通常是在文档中任何位置查找元素的最简单方法。
您需要考虑的第二件事是名称空间。toPosition
的命名空间为继承父命名空间的默认命名空间。父命名空间中的默认命名空间声明由xmlns
属性声明。
那么,把这些放在一起:
XNamespace ns = "http://bb.someplace.com/websvcs";
var element = doc.Descendants(ns + "toPosition").Single();
element.Value = "50";