|
Daniel,
First what do you mean by the current line. My assumption is that you mean the text value associated with an element node. Which happens to be the collection of child nodes to that element which are text nodes.
So look up in the help section that comes with MSXML4 (which I recommend if you do not have)
HRESULT get_childNodes(
IXMLDOMNodeList **childList);
and then look up TextNode. The first part from one of the sections returned is:
XML DOM Enumerated Constants
IXMLDOMNodeType enumerations specify valid settings for the Document Object Model (DOM) node type. The node type determines valid values and whether the node can have child nodes.
Values
The IXMLDOMNodeType enumeration defines the following valid values.
NODE_ELEMENT (1)
The node represents an element (its nodeTypeString property is "element"). An Element node can have the following child node types: Element, Text, Comment, ProcessingInstruction, CDATASection, and EntityReference. The Element node can be the child of the Document, DocumentFragment, EntityReference, and Element nodes.
NODE_ATTRIBUTE (2)
The node represents an attribute of an element (its nodeTypeString property is "attribute"). An Attribute node can have the following child node types: Text and EntityReference. The Attribute node does not appear as the child node of any other node type; it is not considered a child node of an Element.
NODE_TEXT (3)
The node represents the text content of a tag (its nodeTypeString property is "text"). A Text node cannot have any child nodes. The Text node can appear as the child node of the Attribute, DocumentFragment, Element, and EntityReference nodes.
So you get the list of child nodes and step through that list. Compare the node type of the child to "NODE_TEXT" (3) and you most of the way there.
Once you get the flavor it really does make sense.
"I will find a new sig someday."
|
|
|
|
|
What I mean is the current line of a xml node / element in the xml file, like the get_line() function of the IXMLDOMParseError return.
I read some attributes of a xml node / element and check if they are in the possible range (eg. - 100 < attribute < +100). If the attribute is not in the range I want to display an error with the line, where I read the attribute / node / element!
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
Have you considered using a schema to enforce your data type and valid ranges? Going in that direction may be a lot easier since you basically let the XML parser validate all of your data.
|
|
|
|
|
Do you have any sample how I can tell the MSXML DOM parser how to valid my XML file?
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
Daniel S. wrote:
What I mean is the current line of a xml node / element in the xml file, like the get_line() function of the IXMLDOMParseError return.
Do not confuse the parser error messages that help identify where an error occurs by referencing the line in the file that contains the xml file with how the DOM is structured. All ascii data (non attribute values, comments, processing instructions, etc) is text nodes in the the DOM (line feeds etc. inlcuded)
To get the value of an attribute node:
hr = pIXMLDOMElement->getAttribute(bstrAttributeName, &varValue);
see "IXMLDOMAttribute" in the MSXML 4 help file for the above code sample.
YOu need to get the root node and then work your way down the child nodes handling them as appropriate.
"I will find a new sig someday."
|
|
|
|
|
I'm trying to chop the sig digits of numbers. The numbers are accessed at certain levels down the data structure, e.g. /OverallData/Year/Area/../../Value. It causes error if I use format-number(/OverallData/../../../.., ###.##), how do you do it? Also the number can be an attribute of a node. It's a pretty lazy question, but I'm in a hurry to finish off a task, thanks in advance.
|
|
|
|
|
I never tried it with a full XPath but I think you need to add apostrophs around the format string, e.g.:
<xsl:value-of select="format-number(<XPath>,'###.##&apos)" />
Hope this helps,
Bjørn.
|
|
|
|
|
I try to save my data in my pocket pc application in xml with the MSXML DOM parser. I looked on some source codes and found out that are are many different classes (interfaces) like "IXMLDOMDocumentPtr" and "IXMLDOMDocument" ... what's the different between this classes (interfaces)?
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
They basicly the same. The COM interfaces without the trailing Ptr are the raw interfaces, while the ones with the ptr are smart pointers which free the COM object if the interfaces isnt referenced anymore.
|
|
|
|
|
IXMLDOMDocument is a COM interface. IXMLDOMDocument* is an interface pointer on a particular instance of a DOMDocument COM object. IXMLDOMDocumentPtr is a typedef for a _com_ptr_t that manages a IXMLDOMDocument* .
--Mike--
"Adventure. Excitement. A Jedi craves not these things."
-- Silent Bob
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Thanks!
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
I have a question about the MSXML parser ...
I want to save a CString in an XML file with the MSXML parser ...
So when the MSXML parser writes the string to the file does it check the string and convert some characters like "<, >, &, ..." to someone what is allowed for XML (< > ...) ???
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
You could write it to a CDATA section to create a node that accepts any kind of char, so you don't need to convert any char.
It's as easy as:
xmlDoc->createCDATASection("This is where the string goes");
I see dumb people
|
|
|
|
|
And what when I want to write the string to a attribut, like <ITEM description="Here is the string ... < > ..."> ?
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
The MSXML DOM does the conversion for you & to & etc so you need not worry about it. However when you get a value out of the DOM it will not appear converted ie you will still retrieve &, the converted versions are there when the document is written to file or the XML retrieved with getXML etc
|
|
|
|
|
Thanks!
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
Hi Gurus,
I have a greate trouble while updating the value of text node. I have a
pointer to the node from existing XML document:
----------------------
IXMLDOMNodePtr pNode;
TCHAR szTmp[100];
VARIANT varTmp;
_stprintf(szTmp,"%d",newid);
varTmp.vt=VT_BSTR; varTmp.bstrVal=_bstr_t(szTmp);
hr=pNode->put_nodeTypedValue(varTmp); // hr returns E_FAIL under IE 5.x
----------------------
This works on systems with IE 6.0 installed.
This doesn't work on systems with IE 5.x installed.
Please help me! How to update the node on systems with IE 5.x installed ?
I'm a XML novice so any ideas appreciated.
Yours sincerely,
Alex Bash
|
|
|
|
|
Install MSXML version 3. It's available from the Microsoft site. As a bonus, it supports proper XSLT, whereas the standard did not exist when IE 5.x came out, so they had to make some guesses.....
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Correction: Install MSXML version 4.
Without installing and still running on those "IE5.x systems", I suggest assigning the value to nodeValue (instead of nodeTypedValue), and validate when parsing.
Where does your element get the type info from? Schemas, or DTD? What is the node's dataType value? I would assume both IE5.x and IE6.0 have a different opinion about the node's data type...
Bernd
|
|
|
|
|
While i using an interface of DOM (IXMLDOMNode *) as an parameter of an interface like that :
<br />
[helpstring("method Load")] HRESULT Load([in]IXMLDOMNode * piXMLNode);<br />
there is an midl error :
midl\oleaut32.dll : error MIDL2020 : error generating type library : AddImplType failed : IXMLDOMDocument
How it caused and how to handle it?
thank.
Scratch
|
|
|
|
|
You can only pass a limited number of parameters on a COM interface, and the only way to pass COM objects is as an IUnkown * ( and maybe IDispatch *, I forget ).
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Ok,that's it ,thanks.
Scratch
|
|
|
|
|
Christian Graus wrote:
You can only pass a limited number of parameters on a COM interface, and the only way to pass COM objects is as an IUnkown * ( and maybe IDispatch *, I forget ).
Actually, you can pass anything as long as the midl-compiler knows about it. I.e. anything declared within the same idl file or imported from another idl-file.
--
This space for rent.
|
|
|
|
|
If you are defining a custom interface or dual interfaces, gorget what Christian said to you: you CAN do it. The only problem will appear when you use a [in, out] parameter, and then, the only problem will be that scripting clients won't be able to call your method (you'll get a "type mismatch" from VBScript)
You need to put a importlib in your IDL file, under the library section:
For importing ADO, you could do this:
importlib("c:\program files\common files\system\ado\msado26.tlb");
change the path to the MSXML parser type library on your development machine;
PS:
As much as I hate VB, it can be a great tool for protoryping COM interfaces and quickly writing a IDL. When you don't know how to define a COM interface, create a COM DLL in VB with the desired interface and look the IDL on OLEVIEW
I see dumb people
|
|
|
|
|
Another question ...
When the midl process my .idl file ,it arbitrarily import the default msxml sdk and use the old version objects.
if use one of these directors
#include "C:\Program Files\MSXML 4.0\inc\msxml2.h"
#include "C:\Program Files\MSXML 4.0\inc\msxml2.idl"
#import "C:\winnt\system32\msxml4.dll" no_namespace
Certain Interfaces are redefine .
My wonder how to got rid of the midl's default msxml library and use my own sdk library?
Scratch
|
|
|
|