【发布时间】:2018-02-20 16:03:30
【问题描述】:
以下是创建 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 instance not set 错误。我也尝试过以下格式:
request.Root......(但 Root 不可作为选项)
我错过了什么?我从当前的回复中怀疑这可能与我正在使用的自定义命名空间有关??
谢谢。
【问题讨论】:
-
XElement tokenRequest = doc.Descendants("tokenRequest").FirstOrDefault(); tokenRequest.Add(new XElement("ccv", new XElement("newElement","value")));
-
XElement tokenRequest = doc.Descendants("tokenRequest").FirstOrDefault();返回为空...这是我的问题
-
文件中是否有命名空间。试试 XElement tokenRequest = doc.Descendants().Where(x => x.Name.LocalName == "tokenRequest").FirstOrDefault();
-
是的,我正在使用自定义命名空间。这在构建它时会导致其他问题。
-
没有看到实际的命名空间,我无法给出更好的答案。您可以使用以下方法从我的结果中获取命名空间:XNamespace ns = tokenRequest.GetDefaultNamespace();
标签: c# xml linq-to-xml