Сохранение определенного узла в файле XML - PullRequest
0 голосов
/ 15 июля 2011

Я заполняю текстовые поля информацией из определенного узла на основе его ConfirmNum. Затем, когда вся информация обновляется, я сохраняю информацию (с помощью кнопки отправки) обратно на конкретный узел.

Однако при сохранении каждый узел в XML-файле, который был пустым , возвращается к другой строке.

Пример XML перед сохранением:

<OnlineBanking>
  <Transactions>
    <Txn>
      <Login></Login>
      <UserName>userName</UserName>
      <CustomerName>CustomerName</CustomerName>
      <ConfirmNum>1234</ConfirmNum>
    </Txn>
  </Transactions>
</OnlineBanking>

Мой код (ниже) сохранит информацию для этого узла на основе номера Page.aspx?CID=1234. Однако каждый узел во всем XML-файле, который был пустым, теперь будет иметь разрыв строки. Не только Txn, который мы только что отредактировали, но и все.

Вот мой код:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    XmlDocument item = new XmlDocument();
    item.Load(xmlFileName);
    if (CID != "")
    {
        XmlNode xlist = item.SelectSingleNode("OnlineBanking/Transactions/Txn[ConfirmNum=" + CID + "]");
        if (xlist != null)
        {
            xlist.ChildNodes.Item(0).InnerText = tbLogin.Text;
            xlist.ChildNodes.Item(1).InnerText = tbUserName.Text;
            xlist.ChildNodes.Item(2).InnerText = tbCustomerName.Text;
            item.Save(xmlFileName);
        }
    }
}

Пример XML после сохранения:

<OnlineBanking>
  <Transactions>
    <Txn>
      <Login>
      </Login>
      <UserName>userName</UserName>
      <CustomerName>CustomerName</CustomerName>
      <ConfirmNum>1234</ConfirmNum>
    </Txn>
  </Transactions>
</OnlineBanking>

Обратите внимание, что <login> находится на другой строке, чем </login>. Это то, о чем я говорю. Надеюсь, кто-то может ясно видеть, что я не делаю.

Ответы [ 2 ]

0 голосов
/ 15 июля 2011

Один компромисс:

if(string.IsNullOrWhiteSpace(tbLogin.Text))
   xlist.ChildNodes.Item(0).IsEmpty = true;
else
   xlist.ChildNodes.Item(0).InnerText = tbLogin.Text;

Это даст вам:

<Login />
0 голосов
/ 15 июля 2011

Попробуйте установить для свойства PreserveWhitespace значение True и посмотрите, прекратит ли оно вставку разрывов строк при вызове Save:

XmlDocument item = new XmlDocument();
item.PreserveWhitespace = true;
item.Load(xmlFileName);
...