|
How are you reading in the XML file? If you use an XmlTextReader , for example, there is plenty of ways to access both elements and attributes, as well as processing instructions, comments, etc. If you're using an XmlDocument along with the rest of the XML DOM classes, then there are ways to access attributes, elements, processing insturctions, etc., as well. Read the documentation for the class(es) you're using in the .NET Framework SDK.
Otherwise, please be more specific about why you can't seem to read attributes and maybe we can help.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Yes I am using the XmlTextReader. I have a file like
<?xml version="1.0" ?>
<!-- This file represents a fragment of a book store inventory database
-->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author size="25">
<first-name age="25">Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
I am using the ReadString funcyion to read attributes like
...
book genre philosophy publicastiondate 1991 etc.. but.. I can read only one string.. like only philosophy, not the reat..
I want to read each of the attributes saparately.
HELP
MaXx
|
|
|
|
|
You should be using XML-specific methods, like GetAttribute , MoveToAttribute , or ReadAttributeValue . The idea about the XmlTextReader is forward-only reading. You move from element to element and attribute to attribute. If you treat everything as a string, of course you will not get what you want; you may as well not even use XML if you treat the document as a simple text file.
You really should read about the class members on the XmlTextReader [^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I got this code on the net....
private void AddWithChildren(XmlNode xnod, Int32 intLevel)
{
//Adds a node to the ListBox, togather with its children.
//intLevel controls the depth of indenting
XmlNode xnodWorking;
String strIndent = new string(' ',2 * intLevel);
//Get the value of the node (if any)
string strValue = (string) xnod.Value;
if(strValue != null)
{
strValue = " : " + strValue;
}
//Add the node details to the ListBox
Console.WriteLine(strIndent + xnod.Name + strValue);
//For an element node, retrive the attributes
if (xnod.NodeType == XmlNodeType.Element)
{
XmlNamedNodeMap mapAttributes = xnod.Attributes;
//Add the attributes to the ListBox
foreach(XmlNode xnodAttribute in mapAttributes)
{
Console.WriteLine(strIndent + " " + xnodAttribute.Name +
" : " + xnodAttribute.Value);
}
//If there are any child node, call this procedrue recursively
if(xnod.HasChildNodes)
{
xnodWorking = xnod.FirstChild;
while (xnodWorking != null)
{
AddWithChildren(xnodWorking, intLevel +1);
xnodWorking = xnodWorking.NextSibling;
}
}
}
It workes fine but I thought it would be a little easier to get the attributes.. mainly those which are present in the same line as the element tag like
<person fname=nnn lname=hhh>
.....
</person>
Is there an easier way...
MaXx
|
|
|
|
|
You don't read lines in XML, you move from element to element, and attribute to attribute.
Read the class documentation for the XmlTextReader in the .NET Framework SDK. There are plenty of examples there as well. It is very easy, but you don't treat XML as a plain text file, i.e. you don't read lines.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
ok.. maybe i'll find an easier one..
thanx for everythin' bro..
MaXx
|
|
|
|
|
There is no easier way, man! Seriously, read the documentation for classes in the System.Xml namespace in the .NET Framework SDK. XML is easy to work with, one reason it's so popular. There's lots of examples in that documentation, like for the XmlTextReader that you'll probably want.
There's two ways of reading XML: parsing the DOM or parsing the document itself (SAX; basically). You could load an XML document completely into memory using the XmlDocument and use XPath (via SelectNodes or an XPathNavigator , which is pretty fast) to get what you need. This is good for smaller documents.
For larger documents you don't want to load the whole thing into memory, so you use SAX, which is an event-driven way to parse the document. This isn't exactly what using an XmlTextReader is, but it is a forward-only way of reading XML documents. While it isn't event driven, it is operation driven (basically the converse of SAX).
So, if you're document is small and you want to extract, for example, the language that is the default language, do something like this:
XML Document-----------------------------------------------------------
<languages>
<language default="true">
<name>en-US</name>
<englishName>English (United States)</englishName>
</language>
<language>
<name>de-DE</name>
<englishName>German (Germany)</englishName>
</language>
</languages>
C# Snippet-------------------------------------------------------------------
XmlDocument doc = new XmlDocument();
doc.Load("languages.xml");
XmlNode node = doc.DocumentElement.SelectSingleNode(
"language[@default = 'true']/name");
if (node != null)
return CultureInfo(node.Value);
else return null;
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I think I'll use the XmlTextreader. I can navigate throught the nodes properly with the function I have (given up there^) but do I have to use a level variable to go to each attribute and next, Isn't there an attribute reader?? which can go without bieng followed? (by level)
MaXx
|
|
|
|
|
See the XmlTextReader.MoveToNextAttribute , which should stick out like a sore thumb if you read the class documentation for XmlTextReader . There's simply no reason not to read the class documentation, especially for those classes you use in your code.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
of course I read the documentation, I also did the .. readstring.. thing looking at the documentation..
Believe! Every thing has a purpose
|
|
|
|
|
watvh this movie[^]
watch the reading xml files one, it shows how to read attributes. it is in vb, but its in simple code, so it should be easy to convert.
/\ |_ E X E GG
|
|
|
|
|
Thanx for the link eggie, but I cannot cache the win media 9 videos, I have a pretty slow Internet speed, & I can't connect each time I have to view them.
But anyways... that reading Xml files video was good. thanx
MaXx
|
|
|
|
|
Hi,
I want to do some file transfer using FTP. I couldn't find any FTP Class in C#. Is C# is having a class for supporting ftp.
Regards,
Satya
|
|
|
|
|
Hi,
I'd like to have an Assembly running on MachineA which can be accessed (it's classes instanciated) from MachineB. The point is, I'd like to create a Database layer which can be accessed from various client machines and from the webserver. Therefore my plan for such a distributet environment.
What I need is some reading, keywords, starting points. Lot's of thanks in advance.
Matthias
If eell I ,nust draw to your atenttion to het fakt that I can splel perfrectly well - i;ts my typeying that sukcs.
(Lounge/David Wulff)
www.emvoid.de
|
|
|
|
|
You could set up the Runtime Security Policy for the assemblies you want to share. You'll find that in Administrator Tool --> .NET Configuration 1.1
You can then determine what is best for your needs.
If the assemblies have to be used across the internet they you should maybe consider WebServices to expose the required functionality.
Does this help?
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
My Blog
|
|
|
|
|
hi i want to Hook certain msgs
WM_SIZING,WM_MOVING to certain window ho i can do this and there another thing iwant to hook WM_CREATE to all apps how this also can be plz if any one knows answers me
thanx
|
|
|
|
|
|
|
i have a problem in the remote method of the object.
the problem is that when i call a remote method and inside this remote method i am creating a new window from and use the form.Show() method it is hanged and the form doesn't show up.
Any Solution to the problem.
Plz Help Urgent
|
|
|
|
|
The problem is that your remote method isn't executed by the UI thread of your application.
As the Show method has to be run in UI thread, you'll need to invoke it.
www.troschuetz.de
|
|
|
|
|
What Stefan is saying is that you need to use the Invoke method on the parent control in order to call Form.Show . See the method documentation for Invoke in the .NET Framework SDK for more information.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I'm using QuartzTypeLib to view vidoe files in my application
The video class is derived from a Panel class
as
public class MyVideo : System.Windows.Forms.Panel
where the video window is a
private IVideoWindow m_objVideoWindow = null;
MyVideo is then an Item in another Panel class
public class MyPanel : System.Windows.Forms.Panel
that is an Item on my Main class
My problem is that I want a MouseEvent attacht to MyVidoe Item, so when you click on the video while it is in full-screen it will go back to it org. size.
How do I do this?
I've tryed in my MyPanel class
public void AddVideoFromFile(MyVideoLib.MyVideo myVideo)
{
myVideo.BackColor = Color.Blue;
myVideo.Parent = this;
myVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.video_MouseDown);
this.Controls.Add(myVideo);
this.PerformLayout();
}
public void video_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
currentVideo = (MyVideoLib.MyVideo)sender;
if(currentVideo.bFullScreen)
{
......
}
}
This don't work, it dosen't enter the video_MouseDown(..) when I click.
Thanks
Thomas
|
|
|
|
|
Because the video window has it's own message queue that is not seen and, therefore, not handled by the .NET Framework SDK.
In order to "see" the messages, you have to use the put_MessageDrain method or set the MessageDrain property (depending on how the typelib importer defined it) to your Handle property, which is your HWND , or a handle to a window. This will route all messages to your window class.
Because the Panel is a container control, it will not check the target HWND for a message. According to the documentation for the IVideoWindow::put_MessageDrain method, it uses the standard Windows messages such as WM_LBUTTONDOWN , so the Panel should fire the MouseDown event, as well as other events fired because of Windows messages.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
in C++ I can put all my #define statements in a header file and just include that to make it available to whoever needs it. Is there a good way to have #define's in one place and use these in other files in the same project?
|
|
|
|
|
There is no global variable in C#. You can use static variable instead.
Mazy
"One who dives deep gets the pearls,the burning desire for realization brings the goal nearer." - Babuji
|
|
|
|