【问题标题】:Linq XML change parameterLinq XML 更改参数
【发布时间】:2020-10-08 15:10:29
【问题描述】:

我有一个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>

我想用不同的手机号码更改 customeridentifier 号码。我很困惑,因为有这么多的命名空间。我尝试了以下代码,但我知道我遇到了一个问题,不理解命名空间是如何发挥作用的。

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 linq


    【解决方案1】:

    这是怎么做的。

    只有一个命名空间会影响相关 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多