я не могу записать в строку XML, содержащую путь к файлу, c # Net 3.5 - PullRequest
1 голос
/ 11 октября 2009

я получил файл, который содержит простую структуру XML, для работы с xml я использую классы bulit в framework 3.5, для строки, не содержащей обратной косой черты, все работает нормально, но в случае, если строки, которые я пытаюсь записать, содержат обратную косую черту, окончательный файл не сохраняется в диск, никаких исключений или каких-либо ошибок вообще. Независимо от того, пишу ли я это как параметр или как значение узла, я даже пытался заменить "\" на "\\" безуспешно. Что я делаю не так?

для создания узла я использую следующий код

    public XmlElement ToXml(XmlDocument docXml){
        XmlElement answer = docXml.CreateElement("datafile");
        answer.SetAttribute("name", dfName);
        answer.SetAttribute("path", dfPath);
        answer.SetAttribute("user", dfUser);
        answer.SetAttribute("pass", dfPass);
        answer.SetAttribute("defalut", isDefault.ToString().ToLower());
        return answer;
    }

Заранее спасибо за любые предложения

Пол

Ответы [ 2 ]

2 голосов
/ 11 октября 2009

Я попробовал это сам, и у меня нет никаких проблем:

class Program
{
    static void Main(string[] args)
    {
        // get a list of files
        string[] files = Directory.GetFiles(@"D:\backup");

        // create new XML document
        XmlDocument xdoc = new XmlDocument();

        // add a "root" node
        xdoc.AppendChild(xdoc.CreateElement("ListOfFiles"));

        foreach (string file in files)
        {
            xdoc.DocumentElement.AppendChild(CreateXmlElement(xdoc, file));                
        }

        // save file
        xdoc.Save(@"D:\filelist.xml");
    }

    private static XmlElement CreateXmlElement(XmlDocument xmldoc, string filename)
    {
        XmlElement result = xmldoc.CreateElement("datafile");

        result.SetAttribute("name", Path.GetFileName(filename));
        result.SetAttribute("path", Path.GetDirectoryName(filename));
        result.SetAttribute("fullname", filename);

        return result;
    }
}

Дает мне хороший, чистый XML-файл в результате:

<ListOfFiles>
  <datafile name="mse-01-14.zip" path="D:\backup" fullname="D:\backup\mse-01-14.zip" />
  <datafile name="Vor_09.iso" path="D:\backup" fullname="D:\backup\Vor_09.iso" />
</ListOfFiles>

Ни одной проблемы.

Марк

1 голос
/ 11 октября 2009

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

Используйте раздел CDATA , чтобы поместить символы, которые должны игнорироваться анализатором XML.

РЕДАКТИРОВАТЬ: Кажется, "\" не является зарезервированным символом, и я смог отредактировать существующий файл XML и поместить его, как показано ниже.

И браузер отображает его, как и ожидалось.

<Employees xmlns="http://Employees">
  <Employee id="12615" title="Architect">
    <!--This is a comment-->
    <Name>
      <First>Nancy</First>
      <Middle>J.</Middle>
      <Last>Davolio</Last>
    </Name>
    <Street>507 - 20th Ave. E. Apt. 2A</Street>
    <City>Seattle</City>
    <Zip>98122</Zip>
    <Country>
      <Name test="\abc">U.S.A.\\\\</Name>
    </Country>
    <Office>5/7682</Office>
    <Phone>(206) 555-9857</Phone>
    <Photo>Photo.jpg</Photo>
  </Employee>
</Employees>

Каково содержимое переменной с обратной косой чертой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...