Неправильное форматирование XML

1

Я пытаюсь сделать XML-документ через С# с определенным форматом, но у меня возникают проблемы с его правильной ориентацией. Вот как это получается:

<?xml version="1.0" encoding="UTF-8" ?> 
<loanRequest d1p1:ssn=""
d1p2:creditScore=""
d1p3:loanAmount=""
d1p4:loanDuration=""
xmlns:d1p4="26-08-2015 12:41:11"
xmlns:d1p3="147862"
xmlns:d1p2="266"
xmlns:d1p1="765383-2478" /> 

Вот что должно было быть:

<?xml version="1.0" encoding="UTF-8" ?>
<LoanRequest>
 <ssn>765383-2478</ssn>
 <creditScore>266</creditScore>
 <loanAmount>147862</loanAmount>
 <loanDuration>2015-08-26 12:41:11.0 CET</loanDuration>
</LoanRequest>

XML-манипуляция на С# действительно сбивает меня с толку, и мне сложно собраться вместе, как это сделать. Код, который я использую для создания документа XML, выглядит следующим образом:

    XmlDocument doc = new XmlDocument();
    XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
    doc.AppendChild(docNode);
    XmlNode loanRequest = doc.CreateElement("loanRequest");
    XmlAttribute ssn = doc.CreateAttribute("ssn", l.SSN);
    XmlAttribute creditscore = doc.CreateAttribute("creditScore", ""+l.CreditScore);
    XmlAttribute loanamount = doc.CreateAttribute("loanAmount", ""+l.LoanAmount);
    XmlAttribute loanduration = doc.CreateAttribute("loanDuration", l.LoanDuration.ToString());
    loanRequest.Attributes.Append(ssn);
    loanRequest.Attributes.Append(creditscore);
    loanRequest.Attributes.Append(loanamount);
    loanRequest.Attributes.Append(loanduration);
    doc.AppendChild(loanRequest);
  • 0
    Почему вы создаете атрибуты, если вы хотите элементы?
  • 0
    @BenRobinson Я не совсем понимаю манипуляции C # XML. Я написал это в вопросе: P
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Почему бы не использовать Linq для Xml

XDocument doc = new XDocument(
                 new XComment("this is a comment"),
                 new XElement("LoanRequest",
                      new XElement("ssn", l.SSN),
                      new XElement("creditScore", l.CreditScore),
                      new XElement("loanAmount", l.LoanAmount),
                      new XElement("loanDuration", l.loanDuration.ToString())));

doc.Save(path);
  • 0
    Спасибо. Я сделал то, что вы сказали, а затем получил вспомогательную функцию, чтобы превратить его в XmlDocument и затем получить InnerXml , чтобы получить правильный формат. Я только пропускаю продолжительность сейчас. Я могу получить только полную дату или полный рабочий день, и если я вызываю ToString() для самого объекта DateTime , я получаю только то, что мне нужно.
1

Очевидно, вы добавляете в качестве атрибутов то, что должно быть узлами. Замените вызовы CreateAttribute на вызовы AppendChild.

  • 0
    Но это оставляет мне только строку для имени. Как мне добавить значение?
  • 0
    Класс XmlNode имеет Value prpoerty, как описано здесь msdn.microsoft.com/en-us/library/…
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню