0

分離されたストレージにある既存のXMLにいくつかのノードを追加しています。

 using (Stream stream = myIsolatedStorage.OpenFile("History.xml", FileMode.Open, FileAccess.ReadWrite))
                        {
                           XDocument loadedData = XDocument.Load(stream);

                            var RootNode = new XElement("History");
                            var RecipentN = new XElement("RecipentName", "ABC");
                            var RecipentNo = new XElement("RecipentNumber", "ABABAB");
                            var Time = new XElement("TimeStamp", "Monday");
                            var MessageBody = new XElement("Message", "23");
                            RootNode.Add(RecipentN, RecipentNo, Time, MessageBody);
                            loadedData.Root.Add(RootNode);
                            loadedData.Save(stream);
                        }
                    }

私のXMLはこのようになりたい

<?xml version="1.0" encoding="utf-8"?>
<History>
  <RecipentName>Arslan</RecipentName>
  <RecipentNumber>03336329631</RecipentNumber>
  <TimeStamp>123456</TimeStamp>
  <Message>ABC</Message>
</History

<History>
  <RecipentName>Arslanaa</RecipentName>
  <RecipentNumber>03336329631</RecipentNumber>
  <TimeStamp>123456</TimeStamp>
  <Message>ABC</Message>
</History

しかし、私のコードは既存のXMLに誤ってマージされます

<?xml version="1.0" encoding="utf-8"?>
<History>
  <RecipentName>Arslan</RecipentName>
  <RecipentNumber>03336329631</RecipentNumber>
  <TimeStamp>123456</TimeStamp>
  <Message>ABC</Message>
  <History>
    <RecipentName>Java</RecipentName>
    <RecipentNumber>John</RecipentNumber>
    <TimeStamp>23</TimeStamp>
    <Message>23</Message>
  </History>
</History>

誰でも私を助けてくださいIsolatedstorageにある既存のXMLにノードする方法。

履歴のようにメインルートノードを追加するのに問題はありませんが、XMLTextWritterを使用して書き込む方法は、ライターを使用して履歴ルートノードを追加する方法を意味します

                    writer.WriteStartElement("History", "");

                    writer.WriteStartElement("RecipentName", "");
                    writer.WriteString("Arslan");
                    writer.WriteEndElement();

                    writer.WriteStartElement("RecipentNumber", "");
                    writer.WriteString("03336329631");
                    writer.WriteEndElement();

                    writer.WriteStartElement("TimeStamp", "");
                    writer.WriteString("123456");
                    writer.WriteEndElement();

                    writer.WriteStartElement("Message", "");
                    writer.WriteString("ABC");
                    writer.WriteEndElement();

                    // Ends the document
                    writer.WriteEndDocument();
                    writer.flush();
4

2 に答える 2

1

ルート ノードがないため、ターゲット XML は無効です。History同じレベルに2 つのノードがあります。

新しいルート (たとえばHistories) を取得して満足している場合は、次のようにすることができます。

// load original XML from the stream
XDocument loadedData = XDocument.Load(stream);

// create a new parent XML structure (new root) and load the original nodes
var newXml = new XDocument(new XElement("Histories"));
newXml.Root.Add(loadedData.Root);

// create the new node
var NewNode = new XElement("History");
var RecipentN = new XElement("RecipentName", "ABC");
var RecipentNo = new XElement("RecipentNumber", "ABABAB");
var Time = new XElement("TimeStamp", "Monday");
var MessageBody = new XElement("Message", "23");
NewNode.Add(RecipentN, RecipentNo, Time, MessageBody);  

// add the new node
newXml.Root.Add(NewNode);

// save the stream
newXml.Save(stream);

これにより、以下が得られます。

<Histories>
  <History>
    <RecipentName>Arslan</RecipentName>
    <RecipentNumber>03336329631</RecipentNumber>
    <TimeStamp>123456</TimeStamp>
    <Message>ABC</Message>
  </History>
  <History>
    <RecipentName>ABC</RecipentName>
    <RecipentNumber>ABABAB</RecipentNumber>
    <TimeStamp>Monday</TimeStamp>
    <Message>23</Message>
  </History>
</Histories>

これはあなたが望むものかもしれません。

于 2012-06-01T12:03:14.370 に答える
0

こんにちは、ついに私はイエメンの助けを借りてこのことを管理し、それに関するいくつかの研究開発を行いました。

ここに私のために働く私のコードスニペットがあります...

if (!myIsolatedStorage.FileExists("History.xml"))
                {
                    using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("History.xml", FileMode.Create, myIsolatedStorage))
                    {
                        XmlWriterSettings settings = new XmlWriterSettings();
                        settings.Indent = true;
                        using (XmlWriter writer = XmlWriter.Create(isoStream, settings))
                        {
                            writer.WriteStartElement("History", "");
                            writer.WriteStartElement("SmSHistory", "");

                            writer.WriteStartElement("RecipentName", "");
                            writer.WriteString(RecipentName);
                            writer.WriteEndElement();

                            writer.WriteStartElement("RecipentNumber", "");
                            writer.WriteString(RecipentNumber);
                            writer.WriteEndElement();

                            writer.WriteStartElement("TimeStamp", "");
                            writer.WriteString(TimeStamp);
                            writer.WriteEndElement();

                            writer.WriteStartElement("Message", "");
                            writer.WriteString(Message);
                            writer.WriteEndElement();

                            // Ends the document
                            writer.WriteEndDocument();

                            // Write the XML to the file.
                            writer.Flush();
                        }
                    }
                }

                else
                {
                    XDocument loadedData;
                    using (Stream stream = myIsolatedStorage.OpenFile("History.xml", FileMode.Open, FileAccess.ReadWrite))
                    {
                        // Load History.xml From Isolated Storage
                        loadedData = XDocument.Load(stream);

                        // Add SMS History Tags to XMLDocument
                        var RootNode = new XElement("SmSHistory");
                        var RecipentN = new XElement("RecipentName", RecipentName);
                        var RecipentNo = new XElement("RecipentNumber", RecipentNumber);
                        var Time = new XElement("TimeStamp", TimeStamp);
                        var MessageBody = new XElement("Message", Message);
                        RootNode.Add(RecipentN, RecipentNo, Time, MessageBody);

                        // Find Root Element And Descedents and Append New Node After That
                        var root = loadedData.Element("History");
                        var rows = root.Descendants("SmSHistory");
                        var lastRow = rows.Last();
                        lastRow.AddAfterSelf(RootNode);
                    }

                    // Save To History.xml File 
                    using (IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("History.xml", FileMode.Create, myIsolatedStorage))
                    {
                        loadedData.Save(myStream);
                    }
                }
            }
于 2012-06-02T16:33:07.027 に答える