Hi All,

Trying to build a language user control where you can enter a danish entry,
followed by an english translation, a story id (People enter 0 when there
is no story) and comments (This is the plural version of this word etc).
They then select whether this entry is a keyword, phrase, question or part
of a story.

It calls a class DanishDB to perform the insert and sends the information
as parameters. I've tried extending this class by adding a Method to check
to see if it already exists (Only implemented for Keyword entry so far).  I
thought it would work but it doesn't.

first I tried the query "keyword[danish='"+danishEntry+"']" but that
returned everything within the xml document and it just saw the entry as a
new entry?????

I've now tried this "danish='" + danishEntry + "'"; and it gives me the
error mentioned in the subject.

The class looks like the following:

using System;
using System.Xml;
using System.Xml.XPath;

namespace Mandia
{
 /// <summary>
 /// Summary description for EntryDB. This handles all the handling
of the xml files.
 /// </summary>
 public class DanishDB
 {
  public DanishDB()
  {
   //
   // TODO: Add constructor logic here
   //
  }

  string FilePath;   // Used to point
the code to the correct XML file

  public string AddToDocument(string entryType, string
danishEntry, string englishEntry, string entryComment,string storyId,
string XmlPath )
  {

   // the checkResult either contains exists or
doesn't exist.
   string checkResult = CheckDocument(entryType,
danishEntry, XmlPath);

   if (checkResult == "exists")
   {
    return "I am sorry but your entry was not
added as it already exists!";
   }
   else
   // the entry doesn't exist so it can be added.
   {
    // I've returned early because I wanted to
see what was in it
    return checkResult;
    XmlDocument doc = new XmlDocument();

    switch(entryType)
    {
     case "Keyword":
  // a keyword was entered

      FilePath = XmlPath
+ "DanishKeyWords.xml";

      // use case to ensure that
you load up the right xml document
      doc.Load(FilePath);

      // create a new Keyword
entry
      XmlElement newKeywordEntry
= doc.CreateElement("keyword");

      // create a new danish
element
      XmlElement newDanishKeyword
= doc.CreateElement("danish");
      newDanishKeyword.InnerText
= danishEntry;
      newKeywordEntry.AppendChild
(newDanishKeyword);

      // create a new english
element
      XmlElement
newEnglishKeyword = doc.CreateElement("english");
      newEnglishKeyword.InnerText
= englishEntry;
      newKeywordEntry.AppendChild
(newEnglishKeyword);

      // create a new comment
element
      XmlElement
newKeywordComment = doc.CreateElement("comment");
      newKeywordComment.InnerText
= entryComment;
      newKeywordEntry.AppendChild
(newKeywordComment);

      // create a new StoryId
element
      XmlElement
newKeywordStoryId = doc.CreateElement("storyid");
      newKeywordStoryId.InnerText
= storyId;
      newKeywordEntry.AppendChild
(newKeywordStoryId);

      // add to the current
document

 doc.DocumentElement.AppendChild(newKeywordEntry);

      // update the correct xml
document
      doc.Save(FilePath);

      break;

     case "Phrase":
 // a useful keyphrase was entered

      FilePath = XmlPath
+ "DanishKeyPhrases.xml";
      // use case to ensure that
you load up the right xml document
      doc.Load(FilePath);

      // create a new KeyPhrase
entry
      XmlElement
newKeyphraseEntry = doc.CreateElement("keyphrase");

      // create a new danish
element
      XmlElement
newDanishKeyphrase = doc.CreateElement("danish");

 newDanishKeyphrase.InnerText = danishEntry;

 newKeyphraseEntry.AppendChild(newDanishKeyphrase);

      // create a new english
element
      XmlElement
newEnglishKeyphrase = doc.CreateElement("english");

 newEnglishKeyphrase.InnerText = englishEntry;

 newKeyphraseEntry.AppendChild(newEnglishKeyphrase);

      // create a new comment
element
      XmlElement
newKeyphraseComment = doc.CreateElement("comment");

 newKeyphraseComment.InnerText = entryComment;

 newKeyphraseEntry.AppendChild(newKeyphraseComment);

      // create a new StoryId
element
      XmlElement
newKeyphraseStoryId = doc.CreateElement("storyid");

 newKeyphraseStoryId.InnerText = storyId;

 newKeyphraseEntry.AppendChild(newKeyphraseStoryId);

      // add to the current
document

 doc.DocumentElement.AppendChild(newKeyphraseEntry);

      // update the correct xml
document
      doc.Save(FilePath);

      break;

     case "Question":
  // a useful keyphrase was entered

      FilePath = XmlPath
+ "DanishKeyQuestions.xml";
      // use case to ensure that
you load up the right xml document
      doc.Load(FilePath);

      // create a new KeyPhrase
entry
      XmlElement
newKeyquestionEntry = doc.CreateElement("keyquestion");

      // create a new danish
element
      XmlElement
newDanishKeyquestion = doc.CreateElement("danish");

 newDanishKeyquestion.InnerText = danishEntry;

 newKeyquestionEntry.AppendChild(newDanishKeyquestion);

      // create a new english
element
      XmlElement
newEnglishKeyquestion = doc.CreateElement("english");

 newEnglishKeyquestion.InnerText = englishEntry;

 newKeyquestionEntry.AppendChild(newEnglishKeyquestion);

      // create a new comment
element
      XmlElement
newKeyquestionComment = doc.CreateElement("comment");

 newKeyquestionComment.InnerText = entryComment;

 newKeyquestionEntry.AppendChild(newKeyquestionComment);

      // create a new StoryId
element
      XmlElement
newKeyquestionStoryId = doc.CreateElement("storyid");

 newKeyquestionStoryId.InnerText = storyId;

 newKeyquestionEntry.AppendChild(newKeyquestionStoryId);

      // add to the current
document

 doc.DocumentElement.AppendChild(newKeyquestionEntry);

      // update the correct xml
document
      doc.Save(FilePath);

      break;

     default:   //
handle all other entries
      //TODO: Add default error
handler

      break;
    } // end switch

    return "Your entry has been added
successfully!";
   } // end of else statement

  }


  private string CheckDocument(string entryType, string
danishEntry, string XmlPath )
  {
   XmlDocument checkdoc = new XmlDocument();

   switch(entryType)
   {
    case "Keyword":
 // a keyword was entered

     FilePath = XmlPath
+ "DanishKeyWords.xml";

     // use case to ensure that you load
up the right xml document
     checkdoc.Load(FilePath);

     // create the XPath query to search
the xml document
     string keywordSearch = "danish='" +
danishEntry + "'";

     // create the XPath Navigator
     XPathNavigator nav =
checkdoc.CreateNavigator();

     // execute the search to try and
retrieve an xml node
     XPathNodeIterator xpi = nav.Select(
keywordSearch );

     // check to see if entry already
exists in xml document
     if ( xpi.Count !=0 )
     {
      // return a flag saying
entry exists
      return "exists";
     }
     else
     {
      // return a flag to say
that it doesn't exist
      return
xpi.Current.Value; //if it doesn't exist I wanted to see what it did have;
     }

     break;

    case "Phrase":    //
a useful keyphrase was entered

     // return a flag saying entry exists
     return "exists";
     break;

    case "Question":
 // a useful keyphrase was entered

     // return a flag saying entry exists
     return "exists";
     break;

    default:   // handle
all other entries
     //TODO: Add default error handler

     // return a flag saying entry exists
     return "exists";
     break;
   } // end switch

  }

 }
}


I was wondering if someone could point out where I was going wrong.  This
is my first real attempt at c#and .Net so the class isn't perfect.

The xml document looks like:

<?xml version="1.0" encoding="utf-8"?>
<keywords>
  <keyword>
    <danish>jeg</danish>
    <english>I</english>
    <comment>
    </comment>
    <storyid>1</storyid>
  </keyword>
  <keyword>
    <danish>er</danish>
    <english>am</english>
    <comment>
    </comment>
    <storyid>1</storyid>
  </keyword>
</keywords>

Any comments would be appreciated.

Thanks,

John

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to