以下是如何创建XML(使用.Net 4.7):
public XElement ConstructHvtPayload(PayPageRequest ppRequest)
{
XNamespace xNamespace = "http://www.litle.com/schema";
var request =
new XElement(xNamespace + "litleRequest",
new XAttribute("version", "9.13"),
new XAttribute("xmlns", "http://www.litle.com/schema"),
new XAttribute("id", OrderId),
new XAttribute("numBatchRequests", "1"),
new XElement(xNamespace + "authentication",
new XElement(xNamespace + "user", "testuser"),
new XElement(xNamespace + "password", "winteriscoming")),
new XElement(xNamespace + "batchRequest",
new XAttribute("id", OrderId),
new XAttribute("numTokenRegistrations", "1"),
new XAttribute("merchantId", MerchantId),
new XElement(xNamespace + "registerTokenRequest" ,
new XAttribute("id", OrderId), right?
new XAttribute("reportGroup", MerchantId),
new XElement(xNamespace + "orderId", ppRequest.OrderId),
new XElement(xNamespace + "accountNumber", ppRequest.AccountNumber)
)));
return request;
}
我想要做的是在返回之前添加一个If语句,以便在满足特定条件时插入新元素“cardValidationNumber”。
我尝试了以下(以及其他类似选项):
request.Element("batchRequest").Element("tokenRequest").Add(new XElement(xNamespace + "cardValidationNum", "CCV"));
我正在获取Object实例未设置错误。我也尝试了以下格式:
request.Root ......(但Root不作为选项提供)
我错过了什么?我怀疑从当前的回复中可能与我正在使用的自定义命名空间有关吗?
感谢。
答案 0 :(得分:0)
如果不知道“请求”的来源,很难确定您收到错误的原因。 假设request是XDocument本身,它应该看起来像这样
request.Element("littleRequest").Element("batchRequest").Element("tokenRequest").Add(new XElement("ccv", "NEW ELEMENT & VALUE HERE"));
答案 1 :(得分:0)
尝试这样(使用XPath而不是LINQ to XML)
string path = @"D:\testing.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
string item = "abcxyz";
XmlElement el = (XmlElement)doc.SelectSingleNode("//tokenRequest");
if (el != null)
{
XmlElement elem = doc.CreateElement("CCV");
elem.InnerText = item;
el.AppendChild(elem);
}
doc.Save(path);
答案 2 :(得分:0)
试试这个:
var doc = XElement.Parse("<littleRequest><authentication><user>USER NAME HERE</user><password>PASSWORD HERE</password></authentication><batchRequest><tokenRequest><orderId>ORDER ID VALUE</orderId><accountNumber>accountNumberHERE</accountNumber></tokenRequest></batchRequest></littleRequest>");
var tokenRequest = doc.Descendants("tokenRequest").FirstOrDefault();
tokenRequest?.Add(new XElement("ccv", "NEW ELEMENT & VALUE HERE"));
string xml = doc.ToString();
它对我有用。