【发布时间】:2021-10-31 20:55:05
【问题描述】:
我正在为我的 XML 输出而苦苦挣扎。
我有一个方法接受 PersonalID 并返回 address,以及其中的一些附加信息。
执行 API 请求并将单独的值放入字符串变量中
public string ReturnRegistered(String personalID)
{
string apiurl = apiadress + personalID;
WebRequest request = WebRequest.Create(apiurl);
//TILLÄGG FÖR AUTHENTICATION
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(user, pass);
//TILLÄGG FÖR AUTHENTICATION
WebResponse respons = request.GetResponse();
Stream dataStream = respons.GetResponseStream();
//OBJEKT
XmlSerializer serializer = new XmlSerializer(typeof(List<PrimaryContact>), new XmlRootAttribute("QueueSlot"));
var input = (List<PrimaryContact>)serializer.Deserialize(dataStream);
string firstname = input[0].firstname;
string lastname = input[0].lastname;
string postalAddress = input[0].postalAddress;
string zipCode = input[0].zipCode;
string address = input[0].address;
//FÖR ATT KUNNA TA FRAM ENDAST ETT ATTRIBUT BEHÖVER MAN GÖRA OM HELA WEBREQUESTEN OCH NERÅT
WebRequest request2 = WebRequest.Create(apiurl);
//TILLÄGG FÖR AUTHENTICATION
request2.PreAuthenticate = true;
request2.Credentials = new NetworkCredential(user, pass);
//TILLÄGG FÖR AUTHENTICATION
WebResponse respons2 = request2.GetResponse();
Stream dataStream2 = respons2.GetResponseStream();
//ENVÄRDE
XmlDocument doc = new XmlDocument();
doc.Load(dataStream2);
XmlNodeList elemList2 = doc.GetElementsByTagName("lastPaymentDate");
string lastPaymentDate = elemList2[0].InnerText;
String returnvalue = "<Fields><Field><Name>lastPaymentDate</Name><Value>" + lastPaymentDate + "</Value></Field><Field><Name>Firstname</Name><Value>"+ firstname + "</Value></Field><Field><Name>Lastname</Name><Value>"+ lastname + "</Value></Field><Field><Name>Adress</Name><Value>"+ address + "</Value></Field><Field><Name>ZipCode</Name><Value>"+ zipCode + "</Value></Field><Field><Name>PostalAdress</Name><Value>"+ postalAddress + "</Value></Field></Fields>";
*//I have tryed start with <?xml version="1.0" encoding="UTF-8"?> but no different.*
return returnvalue;
}
然后我的 API 使用该方法并应返回 XmlElement。 “我在这个网站上读到过,我在使用 LoadXml 时不需要指定哪个元素是 Root 和 child 等等”
控制器:
public XmlElement Get(string id)
{
Models.TomtkoRegistered tomtko = new Models.TomtkoRegistered();
String returnvalue = tomtko.ReturnRegistered(id);
XmlDocument doc = new XmlDocument();
doc.LoadXml(returnvalue);
XmlElement root = doc.DocumentElement;
return root;
}
如果我将它打印到文件中,我可以让它工作,但我不知道如何为 webAPI 制作正确格式的 XML,以便我的 webAPI 的接收者可以使用该格式。
但是当我在 Firefox 或 Chrome 中使用 API 时
它“看起来”很好,但是当我查看页面源并尝试使用它,或者将它添加到 Notepad++ 时,所有内容都只是在一行上,并且没有格式化或结构化。
我可以以某种方式强制 Content-Type 为“text/xml”吗? 我是否使用了错误的返回类型? 是否缺少其他代码?
当朋友在Postman 中使用它时,某些操作值默认设置为任何值 (*),但在某种程度上不是 100%,但当他将其放入 XML 中时,它可以工作。但是,如果XmlElement 不成功,我如何让接收者从一开始就明白它应该是 XML?
【问题讨论】:
-
不要使用字符串格式来构建 XML。它不安全。
-
不管怎样,有什么问题?在大多数情况下,XML 文档的“有线格式”并不重要。你真的需要正确格式化字符串吗?如果它被机器消耗,机器不会(可能)关心。
-
抱歉,目标系统非常敏感。我应该在所有行之间使用 /n 吗?当我使用 XmlLoad 时,这是否是必要的?我想知道答案,但我很愿意使用 String 我不能使用它。我应该用 --> XmlDocument doc = new XmlDocument(); 构建 XML XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); doc.AppendChild(docNode); XmlNode productsNode = doc.CreateElement("products"); doc.AppendChild(productsNode);
-
使用
XmlDocumentAPI 构建 XML 文档会是更好的选择,是的。 -
XmlDocument Dosent 工作尝试了相同的结果。输出只有一行。我不认为它的建立......我应该使用什么输出类型?我使用 XmlElement 但那不起作用,字符串只是 wors 有什么我忘记了吗?