【发布时间】:2012-04-18 18:08:52
【问题描述】:
非常感谢您阅读我的问题。
这是我的 xml 文件。 (对于节点 Songs,有很多名为 Song 的子节点)
<?xml version="1.0" encoding="utf-8" ?>
<xmlData>
<version>1.0</version>
<Songs>
<Song>
<artist>mic</artist>
<track>2</track>
<column>happy</column>
<date>14</date>
</Song>
<Song>
<artist>cool</artist>
<track>2</track>
<column>work</column>
<date>4</date>
</Song>
</Songs>
</xmlData>
读取xml,我使用以下代码:
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
XmlNode versionNode = doc.SelectSingleNode(@"/xmlData/version");
Console.WriteLine(versionNode.Name + ":\t" + versionNode.InnerText);
XmlNode SongsNode = doc.SelectSingleNode(@"/xmlData/Songs");
Console.WriteLine(SongsNode.Name + "\n");
XmlDocument docSub = new XmlDocument();
docSub.LoadXml(SongsNode.OuterXml);
XmlNodeList SongList = docSub.SelectNodes(@"/Songs/Song");
if (SongList != null)
{
foreach (XmlNode SongNode in SongList)
{
XmlNode artistDetail = SongNode.SelectSingleNode("artist");
Console.WriteLine(artistDetail.Name + "\t: " + artistDetail.InnerText);
XmlNode trackDetail = SongNode.SelectSingleNode("track");
Console.WriteLine(trackDetail.Name + "\t: " + trackDetail.InnerText);
XmlNode columnDetail = SongNode.SelectSingleNode("column");
Console.WriteLine(columnDetail.Name + "\t: " + columnDetail.InnerText);
XmlNode dateDetail = SongNode.SelectSingleNode("date");
Console.WriteLine(dateDetail.Name + "\t: " + dateDetail.InnerText + "\n");
}
}
它似乎工作。 但是如何将更改写入 xml 文件? 也许,我会在 Song 中更改一些 childNode,并可能通过艺术家关键字删除整个 chindNode。
有没有可能像这个功能 bool DeleteSongByArtist(string sArtist); bool ChangeNodeInSong(string sArtist, string sNodeName, string value);
因为“读取解决方案是“XmlDucoment”,所以最好使用“XmlDocument”“改变解决方案”
但是,如果您对阅读和更改 xml 文件有更好的想法,请给我示例代码...请不要写解决方案的名称,例如“Ling to xml”...实际上,我做了很多睾丸,但都失败了。
【问题讨论】:
-
或者干脆 doc.Save(newFileName);
-
@erlvde:您在代码中途创建了一个全新的 XmlDocument 有什么原因吗?假设这是一个错误,我已经回答了(因为我无法预见任何有用的理由这样做)。