Экспорт содержимого XML из TextBox в файл XML - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь создать приложение, которое импортирует файл XML в TextBox с целью редактирования содержимого. После редактирования пользователь должен иметь возможность сохранить содержимое файла, но в то же время проверить его. Например,

<Person id="22">
    <Name gg="u">John</Name>
    <Surname>Jones</Surname>
    <PhoneNo>333333333111</PhoneNo>
    <Country>Germany</Country>
</Person>

Если пользователь редактирует начальный тег «Имя», но забывает редактировать конечный тег, он должен вызвать исключение. Я пробовал

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(MyTextBox.Text);
xmlDoc.Save(fileName);

и

XmlElement DocRoot = xmlDoc.CreateElement("root");
DocRoot.InnerText = MyTextBox.Text;
xmlDoc.AppendChild(DocRoot);
xmlDoc.Save(fileName);

Ничего не получалось. Я благодарен за любую помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Кажется, что вы пытаетесь проверить, правильно ли сформирован текст XML, и не соответствует ли он определенному определению.

Чтобы проверить, правильно ли сформирован текст XML, вы может попытаться разобрать его и проверить, нет ли в нем ошибок. Вот функция, которая пытается сделать это:

class Program
{
    static void Main(string[] args)
    {
        var result = ValidateXml("<Person id=\"22\"><Name>John<Name></Person>");
        if (!result.IsValid)
        {
            Console.WriteLine($"Line number: {result.Exception.LineNumber}");
            Console.WriteLine($"Line position: {result.Exception.LinePosition}");
            Console.WriteLine($"Message: {result.Exception.Message}");
        }

        // OUTPUT:
        // Line number: 1
        // Line position: 35
        // Message: The 'Name' start tag on line 1 position 28 does not match the end tag of 'Person'.Line 1, position 35.
    }

    static ValidationResult ValidateXml(string xml)
    {
        using (var xr = XmlReader.Create( new StringReader(xml)))
        {
            try
            {
                while (xr.Read())
                {
                }

                return ValidationResult.ValidResult;
            }
            catch (XmlException exception)
            {
                return new ValidationResult(exception);
            }
        }
    }

    public class ValidationResult
    {
        public static ValidationResult ValidResult = new ValidationResult();

        private ValidationResult()
        {
            IsValid = true;
        }

        public ValidationResult(XmlException exception)
        {
            IsValid = false;
            Exception = exception;
        }

        public bool IsValid { get; }

        public XmlException Exception { get;}
    }
}
0 голосов
/ 24 февраля 2020

У меня есть хотя бы это решение, и оно, кажется, работает :). В соответствии с вопросом xsd, у меня есть шаблон c XML.

try
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(MyTextBox.Text);
        XmlWriterSettings settings = new XmlWriterSettings
        {
        Indent = true
    };
    XmlWriter writer = XmlWriter.Create(fileName, settings);
    xmlDoc.Save(writer);
    MessageBox.Show("File overwritten to: " + fileName);
    }
    catch (Exception ex)
    {
    MessageBox.Show("The textbox content is wrong. ");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...