您好我尝试删除xml元素但代码运行成功但是当我检查xml文件数据时没有删除 这是我的Xml数据如何删除 在xml文件中pageno是不同的请帮助
<data>
<Bookmarkdata>
<Bookname>thepdftest</Bookname>
<Bookid>57d86c55-1d9a-49d0-8b60-acdc0c283d24</Bookid>
<Pageno>1</Pageno>
</Bookmarkdata>
<Bookmarkdata>
<Bookname>thepdftest</Bookname>
<Bookid>57d86c55-1d9a-49d0-8b60-acdc0c283d24</Bookid>
<Pageno>2</Pageno>
</Bookmarkdata>
<Bookmarkdata>
<Bookname>thepdftest</Bookname>
<Bookid>57d86c55-1d9a-49d0-8b60-acdc0c283d24</Bookid>
<Pageno>3</Pageno>
</Bookmarkdata>
</data>
这是我的代码
1.这不是任何错误,但不是删除
doc.Descendants("Bookmarkdata")
.Where(x => (string)x.Attribute("Pageno") == pageno)
.Remove();
我尝试使用两个条件使用并返回错误
doc.Descendants("Bookmarkdata")
.Where((x => (string)x.Attribute("Pageno") == pageno) &&
(x => (string)x.Attribute("Bookname") == bookname))
.Remove();
这是我的完整代码
private void DeleteBookMark(string bookname, string pageno)
{
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!file.FileExists("BookmarkFile.xml"))
{
StreamResourceInfo sr_en = Application.GetResourceStream(new Uri("Resources\\BookmarkFile.xml", UriKind.Relative));
using (BinaryReader br_en = new BinaryReader(sr_en.Stream))
{
byte[] data1 = br_en.ReadBytes((int)sr_en.Stream.Length);
//Write the file.
using (BinaryWriter bw = new BinaryWriter(file.CreateFile("BookmarkFile.xml")))
{
bw.Write(data1);
bw.Close();
}
}
}
// work with file at isolatedstorage
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("BookmarkFile.xml", FileMode.Open, file))
{
XDocument doc = XDocument.Load(stream, LoadOptions.None);
doc.Descendants("Bookmarkdata")
.Where((x => (string)x.Attribute("Pageno") == pageno) && (x => (string)x.Attribute("Bookname") == bookname))
.Remove();
// prevent xml file from doubling nodes
if (stream.CanSeek)
stream.Seek(0, SeekOrigin.Begin);
doc.Save(stream);
}
}
}
答案 0 :(得分:1)
您有两个lambdas,您正在与&&
进行比较。 Lambda是一种匿名方法 - 它不是方法执行的结果。因此,您尝试对方法应用条件AND,这会给您带来错误。
Where
运算符接受一个应该返回布尔值的委托。这是正确的语法:
doc.Descendants("Bookmarkdata")
.Where(x => (string)x.Element("Pageno") == pageno &&
(string)x.Element("Bookname") == bookname)
.Remove();
注意:<Pageno>
和<Bookname>
都是元素,而不是属性。