gpt4 book ai didi

c# - 需要一种动态生成 XML 的方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:21 25 4
gpt4 key购买 nike

我有一种情况需要在我的 C# 代码中动态生成以下 XML。例如,XML 文本将是

<Envelope>
<Body>
<Login>
<USERNAME>username</USERNAME>
<PASSWORD>Sm@rt123</PASSWORD>
</Login>
</Body>
</Envelope>

要求是将上述 XML 格式作为字符串发送到 API 调用,这将作为 XML 格式的字符串获得一些响应。

我的问题是上面的示例是针对登录 API 调用的,对于所有 api 调用,元素 Envelope 和 Body 都是相同的并且基于 api 调用,其他部分像登录 api 一样变化,我需要提及一个xml 元素作为登录名,其属性为用户名和密码。

到目前为止,我一直在对上述字符串进行硬编码并尝试测试该功能是否正常工作,但现在我需要自动执行为各个不同的 api 调用生成这些标签的过程。我需要知道如何做到这一点以及最好的方法是什么。

最佳答案

像这样流利的东西......

internal class Program
{
private static void Main(string[] args)
{
new API()
.Begin()
.Login("username", "password")
.Send("someuri");
Console.ReadLine();
}
}

public class API
{
public static readonly XNamespace XMLNS = "urn:hello:world";
public static readonly XName XN_ENVELOPE = XMLNS + "Envelope";
public static readonly XName XN_BODY = XMLNS + "Body";

public XDocument Begin()
{
// this just creates the wrapper
return new XDocument(new XDeclaration("1.0", Encoding.UTF8.EncodingName, "yes")
, new XElement(XN_ENVELOPE
, new XElement(XN_BODY)));
}
}

public static class APIExtensions
{
public static void Send(this XDocument request, string uri)
{
if (request.Root.Name != API.XN_ENVELOPE)
throw new Exception("This is not a request");

// do something here like write to an http stream or something
var xml = request.ToString();
Console.WriteLine(xml);
}
}

public static class APILoginExtensions
{
public static readonly XName XN_LOGIN = API.XMLNS + "Login";
public static readonly XName XN_USERNAME = API.XMLNS + "USERNAME";
public static readonly XName XN_PASSWORD = API.XMLNS + "PASSWORD";

public static XDocument Login(this XDocument request, string username, string password)
{
if (request.Root.Name != API.XN_ENVELOPE)
throw new Exception("This is not a request");

// you can have some fancy logic here
var un = new XElement(XN_USERNAME, username);
var pw = new XElement(XN_PASSWORD, password);
var li = new XElement(XN_LOGIN, un, pw);
request.Root.Element(API.XN_BODY).Add(li);
return request;
}
}

关于c# - 需要一种动态生成 XML 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com