2

私は XML と C# にかなり慣れていないので、この質問が愚かすぎて尋ねることができないかどうかを理解してください。

C# win-form アプリケーションを使用して XML 形式を変換しています。アプリは を使用して xml ファイルを開き、OpenFileDialog変換が実行されます (これは既に行われていますが、以下のようにさらに追加または削除する必要があります)。変換後、アプリは .xml を使用して変更された xml ファイルを保存しますSaveFileDialog

元の XML 形式

<?xml version="1.0" encoding="utf-8" ?> 
   <DataList>
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data> 
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data>
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data>
     ..<Data></Data> continued...
   </DataList>

以下のようにXMLファイルを編集したい

<?xml version="1.0" encoding="utf-8" ?> **→ Remove this delaration!**
 <MainInterface> **→ Add 'root element' before existing nodes**
   <DataList>
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data> 
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data>
    <Data>
     <ID>1</ID>
     <Name>Mike</Name>
     <Age>23</Age>
    </Data>
     ..<Data></Data> continued...
   </DataList>
 </MainInterface> **→ close newly added root element**

以下のコードを試しましたが、うまくいかないようです

OpenFileDialog openFileDialogue = new OpenFileDialog();           
openFileDialog1.DefaultExt = "xml";
openFileDialog1.Filter = "xml files (*.xml)|*.xml";
openFileDialog1.Title = "Select a xml File";
openFileDialog1.ShowDialog();

XDocument xmlFile = XDocument.Load(openFileDialog1.FileName);
**// Remove Declaration**
XDocument doc = new XDocument(new XDeclaration(null, null, null));

**// Add Root Element**
XElement doc1 = XElement.Parse(openFileDialog1.FileName);
XElement root = new XElement("MainInterface", doc1);
//doc.Save(_data)
openFileDialog1.FileName = root.ToString();

-----------------------------------------------------------------------------------
Do something for conversion ~~~
-----------------------------------------------------------------------------------
SaveFileDialog saveFileDialogue1 = new SaveFileDialog();
saveFileDialog1.Filter = "xml File |*.xml";
saveFileDialog1.Title = "Conversion Completed! Save a XML file";
saveFileDialog1.FileName = "XML Converted.xml";            
saveFileDialog1.ShowDialog();
xmlFile.Save(saveFileDialog1.FileName);

ポイントは、新しい XML ファイルを作成するのではなく、既存の xml ファイルを変更して宣言を削除し、ルート要素を追加することです。XML ライターを使用する必要がありますか? これらを行う簡単な方法はありますか?前もって感謝します。

回答ありがとうございます。私はこれが私のために働くことがわかりました!

SaveFileDialog saveFileDialogue1 = new SaveFileDialog();
saveFileDialog1.Filter = "xml File |*.xml";
saveFileDialog1.Title = "Conversion Completed! Save a XML file";
saveFileDialog1.FileName = "XML Converted.xml";            
saveFileDialog1.ShowDialog();

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
StringWriter sw = new StringWriter();
using (XmlWriter xw = XmlWriter.Create(saveFileDialog1.FileName, settings))
   {
      xmlFile.Save(xw);
   }
string s = sw.ToString();
4

2 に答える 2

4

新しい を作成しますXDocumentが、古いものの上に保存するだけです。

// You don't want XElement.Parse here - that treats the filename as the
// XML itself!
XDocument oldDocument = XDocument.Load(openFileDialog1.FileName);
XDocument newDocument = new XDocument(new XElement("MainInterface", 
                                                   oldDocument.Root));
newDocument.Save(saveFileDialog1.FileName);
于 2013-04-29T12:44:02.350 に答える
0

ルートのみを使用して新しいXmlDocumentドキュメントを作成し、開いたドキュメントを宣言を除く最初のドキュメントに追加します。

foreach(XmlNode node in doc)
    if (node.NodeType != XmlNodeType.XmlDeclaration)
    {
// Add node logic here
    }

XmlWriter で書き込み (または上書き) します。

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
于 2013-04-29T13:01:03.990 に答える