如何使用C#编辑SOAP请求中的XML数据
本文关键字:XML 数据 请求 SOAP 何使用 编辑 | 更新日期: 2023-09-27 18:24:35
我想在SOAP请求中编辑一个元素的xml数据,以便发送唯一的SOAP请求。
以下是请求的示例
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:web="http://webservice/">
<soapenv:Header/>
<soapenv:Body>
<web:ca>
<type1>
<ad>2013-07-19</ad>
<name>abcd 13071502</name>
<taker>
<taker>TEST</taker>
<emailAddress>test@test.com</emailAddress>
<name>nameTest</name>
<phoneNo>007007007</phoneNo>
<takerUid>1234</takerUid>
</taker>
</type1>
<type2>4</type2>
<type3>peace</type3>
<type4>test</type4>
</web:ca>
</soapenv:Body>
</soapenv:Envelope>
我想将"name"元素值从"abcd 13071502"更改为"abcd"。我能够从"name"元素中提取数据,并通过在C#中使用以下代码编辑值
System.Xml.XmlTextReader xr = new XmlTextReader(@filePath);
while (xr.Read())
{
if (xr.LocalName == "name")
{
xr.Read();
currentNameValue = xr.Value;
int cnvLen = currentNameValue.Length;
string cnvWOdate = currentNameValue.Substring(0, cnvLen-8);
string newNameValue = cnvWOdate+currTimeDate;
break;
}
}
但是,我不知道如何编辑值和保存文件。如有任何帮助,我们将不胜感激。非常感谢。
使用XmlDocument
类而不是XmlTextReader
类。
System.Xml.XmlDocument xd = new XmlDocument();
xd.Load(@"filepath");
foreach(XmlNode nameNode in xd.GetElementsByTagName("name"))
{
if(nameNode.ParentNode.Name == "type1")
{
string currentNameValue = nameNode.InnerText;
int cnvLen = currentNameValue.Length;
string cnvWOdate = currentNameValue.Substring(0,cnvLen-8);
string newNameValue = cnvWOdate+currTimeDate;
nameNode.InnerText = newNameValue;
}
}
xd.Save(@"newFilePath");
XmlDocument doc = new XmlDocument();
doc.Load("file path");
XmlNode nameNode = doc.SelectSingleNode("/Envelope/Body/ca/type1/name");
string currentNameValue = nameNode != null ? nameNode.InnerText : "name not exist";
int cnvLen = currentNameValue.Length;
string cnvWOdate = currentNameValue.Substring(0, cnvLen-8);
string newNameValue = cnvWOdate+currTimeDate;
nameNode.InnerText = newNameValue; //set new value to tag
要获取节点的Value
或InnerText
,必须确保该节点存在。string currentNameValue
行的格式如下:
var variable = condition ? A : B;
这基本上是说,如果条件为真,那么变量等于A,否则,变量等于B。