我正在尝试设置/更改为“toPosition”的值。我有以下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 ..
答案 0 :(得分:0)
Element
只获取与指定名称匹配的第一个直接子元素。你想要一个嵌套3级深度的元素。 Descendants
将以递归方式读取与名称匹配的所有子元素,因此这通常是在文档中的任何位置查找元素的最简单方法。
您需要考虑的第二件事是名称空间。 toPosition
的名称空间是从其父级继承的默认名称空间。父项中的默认名称空间声明由xmlns
属性声明。
所以,将这些放在一起:
XNamespace ns = "http://bb.someplace.com/websvcs";
var element = doc.Descendants(ns + "toPosition").Single();
element.Value = "50";