2013-04-24 4 views
0

В моем сайте asp.net У меня есть файл XMLкак избежать вставок повторяющихся значений в XML-файл в asp.net

<Image Header="About"> 
<Imagepath>group.jpg</Imagepath> 
<imagetitle>together is fun!</imagetitle> 
</Image> 

У меня есть страница, и в этой странице у меня есть текстовое поле и загрузка файлов контроль. Как я могу избежать вставки повторяющихся узлов в xml-файл?

string spath = Server.MapPath("~/multipleimage.xml"); 
XmlDocument doc = new XmlDocument(); 
doc.Load(spath); 

XmlNode Image = doc.CreateNode(XmlNodeType.Element, "Image", null); 
XmlAttribute att = doc.CreateAttribute("Header"); 
att.Value = "AboutPAPCP"; 
Image.Attributes.Append(att); 

XmlNode Imagepath = doc.CreateNode(XmlNodeType.Element, "Imagepath", null); 
string imagepath = FleUpdgallery.FileName; 
Imagepath.InnerText = imagepath;      

string filename = Path.GetFileName(FleUpdgallery.FileName); 
FleUpdgallery.SaveAs(Server.MapPath("~/uploads/" + filename)); 
Image.AppendChild(Imagepath); 

doc.SelectSingleNode("//RootImage").AppendChild(Image); 
doc.Save(spath); 
+0

Вы пробовали проверить, можете ли вы сначала найти свой узел? – Izzy

+0

да, я могу получить значение узла – user2046904

+0

Попробуйте проверить этот вопрос: http://stackoverflow.com/questions/343667/efficient-algorithm-for-comparing-xml-nodes – filipko

ответ

0

Попробуйте использовать XPath, чтобы узнать, существует ли узел. Например:

string spath = Server.MapPath("~/multipleimage.xml"); 
XmlDocument doc = new XmlDocument(); 
doc.Load(spath); 

//use XPath to search for the node named Image with an attribute Header="AboutPAPCP" 
XmlNodeList existingImages = doc.SelecteNodes("*/Image[@Header='AboutPAPCP']"); 
//if it wasn't found, then it is safe to insert a new node 
if (existingImages == null || existingImages.count == 0) 
{ 
    XmlNode Image = doc.CreateNode(XmlNodeType.Element, "Image", null); 
    XmlAttribute att = doc.CreateAttribute("Header"); 
    att.Value = "AboutPAPCP"; 
    Image.Attributes.Append(att); 

    XmlNode Imagepath = doc.CreateNode(XmlNodeType.Element, "Imagepath", null); 
    string imagepath = FleUpdgallery.FileName; 
    Imagepath.InnerText = imagepath;      

    string filename = Path.GetFileName(FleUpdgallery.FileName); 
    FleUpdgallery.SaveAs(Server.MapPath("~/uploads/" + filename)); 
    Image.AppendChild(Imagepath); 

    doc.SelectSingleNode("//RootImage").AppendChild(Image); 
    doc.Save(spath); 
}