c# - 在 C# 中更改 XML 元素值

标签 c# xml

我的 C# 代码:

XDocument doc = XDocument.Load(filename); 
IEnumerable<XElement> collection = 
    doc.Elements("BCIRequest").Elements("Card").Elements("SelectedPIN");

我的 XML 文档:

<?xml version="1.0" encoding="utf-8"?>
 <BCIRequest Version="2.0"
        xmlns="urn:xxxxxx:bci:request">
  <Header>
<SenderCode>XX99</SenderCode>
<SenderID>9999</SenderID>
<SequenceNumber>123</SequenceNumber>
<CardGroupCount>2</CardGroupCount>
<CardCount>4</CardCount>
<BlockCount>2</BlockCount>
 </Header>
      <!--card groups (must precede cards and blocks)-->
       <CardGroup RequestID="1">
        <CustomerNumber>XX01234567</CustomerNumber>
        <CardGroupName Emboss="true">GROUP ONE</CardGroupName>
  </CardGroup>

  <CardGroup RequestID="2"
            RequestRef="87416CB7-DAEF-483A-BD08-1A885531D958">
   <CustomerNumber>XX12345678</CustomerNumber>
<CardGroupName Emboss="false">GROUP TWO</CardGroupName>
 </CardGroup>
  <Card RequestID="3">
<CustomerNumber>XX01234567</CustomerNumber>
<DriverCard>
  <Driver Emboss="true">MARGE SIMPSON</Driver>
</DriverCard>
<CardTypeID>10</CardTypeID>
<PurchaseCategoryID>11</PurchaseCategoryID>
<Reissue>false</Reissue>
<GeneratedPIN/>
<OdoPrompt>false</OdoPrompt>
<CRNPrompt>false</CRNPrompt>
 </Card>
  <Card RequestID="4">
<CustomerNumber>XX12345678</CustomerNumber>
<VehicleCard>
  <VRN Emboss="true">KYI 830</VRN>
</VehicleCard>
<CardTypeID>10</CardTypeID>
<PurchaseCategoryID>11</PurchaseCategoryID>
<Reissue>false</Reissue>
<SelectedPIN>0123</SelectedPIN>
<OdoPrompt>false</OdoPrompt>
<CRNPrompt>false</CRNPrompt>
  </Card>
  <Card RequestID="5">
<CustomerNumber>XX01234567</CustomerNumber>
<BearerCard>
  <Bearer Emboss="true">OPEN XXXXXX</Bearer>
</BearerCard>
<CardTypeID>10</CardTypeID>
<PurchaseCategoryID>11</PurchaseCategoryID>
<Reissue>false</Reissue>
<FleetPIN/>
<OdoPrompt>false</OdoPrompt>
<CRNPrompt>false</CRNPrompt>
  </Card>
   <Block RequestID="6">
<CustomerNumber>XX01234567</CustomerNumber>
<PAN>7002999999999999991</PAN>
  </Block>
  <Card RequestID="7"
    RequestRef="956EA6C5-7D7E-4622-94D0-38CAD9FCC8DF">
<CustomerNumber>XX01234567</CustomerNumber>
<DriverCard>
  <Driver Emboss="true">HOMER SIMPSON</Driver>
  <VRN Emboss="true">795 DVI</VRN>
</DriverCard>
<EmbossText>SPRINGFIELD POWER</EmbossText>
<CardTypeID>10</CardTypeID>
<TokenTypeID>20</TokenTypeID>
<PurchaseCategoryID>30</PurchaseCategoryID>
<ExpiryDate>2018-12</ExpiryDate>
<Reissue>true</Reissue>
<SelectedPIN>0123</SelectedPIN>
<OdoPrompt>true</OdoPrompt>
<CRNPrompt>true</CRNPrompt>
<!--address with optional fields specified-->
<CardDeliveryAddress OneTimeUse="false">
  <ContactName>M xxxx</ContactName>
  <ContactTitle>Mr</ContactTitle>
  <CompanyName>Sxxxx</CompanyName>
  <Line1>Sector 22-F</Line1>
  <Line2>Springfield Power Plant</Line2>
  <Line3>xxx Road</Line3>
  <City>xxxx</City>
  <Zipcode>xxxx</Zipcode>
  <CountryCode>xxx</CountryCode>
</CardDeliveryAddress>
<!--address with only required fields-->
<PINDeliveryAddress OneTimeUse="true">
  <Line1>xxxx</Line1>
  <City>xxx</City>
  <Zipcode>xxxx</Zipcode>
  <CountryCode>xxxx</CountryCode>
</PINDeliveryAddress>
<Limits>
  <Value Transaction="unlimited" Daily="200" Weekly="unlimited" Monthly="400"/>
  <Volume Transaction="100" Daily="unlimited" Weekly="unlimited" Monthly="unlimited"/>
  <Transactions Daily="unlimited" Weekly="unlimited" Monthly="unlimited"/>
  <Day Monday="true" Tuesday="true" Wednesday="true" Thursday="true" Friday="true" Saturday="false" Sunday="false"/>
  <Time Start="unlimited" End="17:00:00"/>
</Limits>
<Products>
  <FuelProductRestrictionID>40</FuelProductRestrictionID>
  <NonFuelProductRestrictionID>51</NonFuelProductRestrictionID>
  <NonFuelProductRestrictionID>52</NonFuelProductRestrictionID>
  <NonFuelProductRestrictionID>53</NonFuelProductRestrictionID>
  <NonFuelProductRestrictionID>54</NonFuelProductRestrictionID>
  <NonFuelProductRestrictionID>55</NonFuelProductRestrictionID>
</Products>
  </Card>

  <Block RequestID="8"
     RequestRef="69A3E44D-DC10-4BEE-9249-1FC3C651BA0E">
<CustomerNumber>xxxxx</CustomerNumber>
<PAN>xxxxxx</PAN>
  </Block>
 </BCIRequest>

我需要更新上述值中的元素值。旧值是:

<SelectedPIN>0123</SelectedPIN>

新值应该是:

<SelectedPIN EncryptedPIN="TKDS" FormNumber="000793906306">****</SelectedPIN>

谁能帮我解决这个问题?
如果我选择了 BCIRequest 元素,它会返回一个空值。我尝试了很多解决方案,但无法找到一个解决此 XML 文件的方法。

最佳答案

修改Xml的方式有很多种,我更喜欢XDocument

XDocument doc = XDocument.Parse(input);

foreach (var element in  doc.Descendants("SelectedPIN")) // filter if you want single element, in example I modifed for all elements.
{
    element.Add(new XAttribute("EncryptedPIN", "TKDS"));
    element.Add(new XAttribute("FormNumber", "000793906306"));
    element.Value = "xxxxx"; //new value
}

最后您可以使用

保存文档
doc.Save();

看看这个Demo

关于c# - 在 C# 中更改 XML 元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35429355/

相关文章:

c# - 用户控件的图片/图像

c# - 如何在 EF Core 中按条件获取最新条目?

php - XML 标签中的 &lt;![CDATA[]>

c++ - 如何设置QXmlStreamReader atStart?

c# - Entity Framework 6 会在 Task.Run() 语句中正常运行吗?

c# - 在 Visual Studio 中使用 --useHttps 运行 Azure Functions 项目时出错

c# - 有条件地显示 ModalPopupExtender AJAX

python - 在 Python 中从 XML 中获取文本值

c# - WCF 服务上的 XmlSerializer 反序列化时间波动

java - 忽略 spring 依赖注入(inject) : XML