xml - Linq XML 更改参数
问题描述
我有一个 xml 请求正文,如下所示:
<s:Envelope xmlns:s="url1">
<s:Body>
<GetCustomerFunctions xmlns="url2">
<CustomerFunctionRequest xmlns:a="url3" xmlns:i="url4">
<a:AccessToken i:nil="true"/>
<a:CarrierID i:nil="true"/>
<a:Channel i:nil="true"/>
<a:ClaimRefNumber i:nil="true"/>
<a:CustomerIdentifier>1234567899</a:CustomerIdentifier>
<a:IdentifierType>MOBILE_NUMBER</a:IdentifierType>
</CustomerFunctionRequest>
</GetCustomerFunctions>
</s:Body>
</s:Envelope>
我想用不同的手机号码更改客户标识符号码。我很困惑,因为有这么多的命名空间。我尝试了以下代码,但我知道我遇到了一个问题,不了解命名空间是如何发挥作用的。
XDocument doc = XDocument.Load("RequestBody.xml");
XNamespace s = "url1";
XNamespace a = "url3";
XNamespace ns = "url2";
var customerDetails = doc.Element(s + "Envelope").Element(s + "Body").Element(ns + "GetCustomerFunctions").Elements(a + "CustomerFunctionRequest").Single();
customerDetails.Element("CustomerIdentifier").Value = customerIdentifier;
customerDetails.Element("IdentifierType").Value = identifierType;
doc.Save("RequestBody.xml");
解决方案
这是如何做到的。
只有一个命名空间会影响相关的 XML 元素。
C#
void Main()
{
const string fileName = @"e:\temp\RequestBody.xml";
const string newFileName = @"e:\temp\NewRequestBody.xml";
const string CustomerIdentifier = "CustomerIdentifier";
XDocument xdoc = XDocument.Load(fileName);
XNamespace ns1 = "url3";
XElement xElem = xdoc.Descendants(ns1 + CustomerIdentifier).FirstOrDefault();
xElem.SetValue("305803770");
xdoc.Save(newFileName);
}