modifying a tiny node

Today I installed nodelevelupdate.dll and entered the 2 ISAPI filters for IIS. Reboot. I’m not sure whether the installation succeeded. :expressionless:

I don’t know how to use InoReplaceChild. It doesn’t work. Are there any examples?

I really wonder why it is SO HARD to modify a single tiny node (in a huge document). :frowning:

Marcus
[Windows 2000, IIS, XML Starter Kit Newbie, Test-XML-DB: RealEstate]

Make sure your database URL goes via IIS rather than Apache.

say the DB URL is "http://localhost:8080/tamino/db"
and relUrl is "collection/doc/@10"
then tam.InoReplaceChild(relUrl, “//elem[10]”, newElement) should replace the specified elem with the newElement.

Hi,
is this dll part of a official patch? We got the same problem that we’d like to update a single node within a document.
As far as I know the Tamino storage unit is still a document, and thus the entire document must be replaced. Is that correct?
Or are there any new releases out?

Thanks for support, ren

Hi,

I have schema/data that looks something like this:




Tamino Lane


The general idea is that I would like to change the “active” attribute on “John”.

When I query using a string like “/AddressList/Name@[id=“John”]”, the result portion of the response is similar to the following:

xql:result


Tamino Lane


</xql:result>

If I modify the “active” attribute of the Address node and then use the Active X “process” function passing in the “Name” node, I receive an error like the following:

INOXRE8814: Element/attribute name not found;Line 1, Column 1: Element name = Name

If I do the query like this “/AddressList/Name[@id=“John”]/…” and get the root of the document (“AddressList”), modify the same attribute, and then put the “AddressList” node back, it works fine.

My questions are the following:

- Can I put back the node “Name” and its modified subnode “Address” without querying for the entire document?

- If so, what do I need to pass as the parameters to the ActiveX API’s Process method?

Thanks,

Quinn Howard

I’ve posted a FAQ at http://tamino.forums.softwareag.com/viewtopic.php?p=6740

Hope it helps…

Hi,

I installed IIS instead of Apache and then NodeLevelUpdate.dll according to the description.
I made sure that msxml3.dll is being used as Microsoft.XMLDOM.

I queried for a node and tried to append a sibling by cloning the result node. Did not work!

The following command with a realtive URL which is correct as I understand the API, returns nothing.

xDoc = tx.InoAppendChild("/BKP/@1", /BKP/BKPHauptGruppe/BKPGruppe/BKPUnterGruppe[@BKP_ID=“131”], cloneNode);

If I provide null as a relative URL, I receive the following error message:

xDoc = tx.InoAppendChild (null, /BKP/BKPHauptGruppe/BKPGruppe/BKPUnterGruppe[@BKP_ID=“131”], cloneNode);


strXML "<?xml version="1.0"?>
<ino:response xmlns:ino=“http://namespaces.softwareag.com/tamino/response”>
<ino:message ino:returnvalue=“8814”>
ino:messagelineHAAXJE8400 HTTP Error 404 Not Found</ino:messageline>
</ino:message>
ino:messagetextGenerated by NodeLevelUpdate Filter Version 3.1.1.1</ino:messagetext>
ino:messagetextCurrent Date: 03/18/02 Time: 12:58.40</ino:messagetext>
</ino:response>


Does anybody know what this error message (HAAXJE8400) means?

From a quick search of the Tamino documentation for “8400” - the JScript API documentation says:
"…the numerical HTTP error status if any. This would be interrogated if an error 8400 was reported by the Tamino Result."

So it seems likely that error 8400 just means “HTTP error” and the error in question is “404 - Not Found”. This would be a reasonable consequence of null in the document’s relative URL.

Did your other attempt (the first one, with no response) work?

[This message was edited by Bill Leeney on 18 Mar 2002 at 17:25.]

Bill,

unfortunately the Tamino API does not give back any usable error code, my xDoc is null after calling:

xDoc = tx.InoReplaceChild ("/BKP/@1", “/BKP/BKPMainGroup[@ID=“12”]”, xNode);

I tried to modify the element and also just the ID, either failed.
How can I find out what went wrong? Are any good working examples around?

Btw: What makes me curious is the fact, that in your document is stated, that msxml3.dll is required. But at the other hand, what does the Tamino API call UseServerHTTP() exactly mean? There’s no parameter for XMLDOM3. Could this cause the problem?

Any suggestions are welcome, rene

Hi Rene,
Regarding MSXML3, it is definitely needed. The registry entries it creates during registration include a VersionIndependentProgID of “MSXML2.ServerXMLHTTP”, which has a corresponding InProcServer32 of “……msxml3.dll”. So, despite its appearance, this ProgID is really an MSXML3 “feature”.

I have an example but it’s in java (attached). After compiling it, you can execute it with command:
java AppendChild ino:id
where is the URL to your RealEstate database and ino:id is the ino:id (number) of an xml instance in that database, collection “Property”, doctype “Property”. The example will just append a new Price node, value “9999”, to the end of that xml instance.

Does it work for you?
HTH
AppendChild.java (2.11 KB)

Bill,
where do I get the RealEstate database, is it part of the XMLStarter Kit? I’m using V3.1.1.1 (licensed version) and I did not found the RealEstate database.
The example in Java is fine, but since I’m using the ActiveX API I think it does not help a lot. I think the problem is more related to the ActiveX implementation of the Tamino API.
For example, I don’t have such nice helpful functions like setTrace().

Concerning the msxml3.dll, I think that I’m using the right version, but i could be that there is a typical dll versioning problem.

anyway thanks for your help, I’m working on it.
rene

Hi,
Yes RealEstate is part of the original XML Starter Kit.

Hi Rene.

Sorry about the previous examples.
Here is a more general example that uses the demo data provided with Tamino 3111. In the zipped file attached there is a modified Telephone schema. This will allow you to add unbounded instances of a new element type, “Append”, to a Telephone element.

Two examples are provided, both are asp’s but one is in javascript and the other vbscript. Both use the Tamino ActiveX API.

Before running the examples, define the modified schema (attached). The default collection name is “NodeLevelUpdate” and the doctype is “Telephone”. Then “process” (load) some instances (for example, using the Tamino-supplied examples in /examples/data/phone1k.xml), using the Interactive Interface. Be careful to specify collection “NodeLevelUpdate” when processing the xml.

Now set the URL to your database in the asp source code and try the pages.
HTH
NodeLevelUpdate.zip (1.9 KB)

Hi Bill,
thanks for your example, but unfortunately it does not work either on my installation. I tried it out also on another client machine.
The problem has been posted to the SAG customer support center, they take care now about the problem.
You’ll find attached my VB example, which I slightly changed in order to run it on my box. I still receive the following error, when trying to append a child element.

<?xml version="1.0"?>
<ino:response xmlns:ino=“http://namespaces.softwareag.com/tamino/response”>
<ino:message ino:returnvalue=“8814”>
ino:messagelineHAAXJE8400 HTTP Error 404 Not Found</ino:messageline>
</ino:message>ino:messagetextGenerated by NodeLevelUpdate Filter Version 3.1.1.1</ino:messagetext>
ino:messagetextCurrent Date: 03/21/02 Time: 14:08.09</ino:messagetext>
</ino:response>

So, thanks anyway for your help. ren
NodeLevelUpdate_vb.txt (1.86 KB)

NodeLevelUpdate builds the complete docURL from the databaseURL plus the relURL parameter.

If you change your code from:
Set inoResponse = tamino.InoAppendChild(“Telephone/@1”, “Telephone”, element)
to:
Set inoResponse = tamino.InoAppendChild("/Telephone/@1", “Telephone”, element)
(add the extra slash to make the doc URL complete)it should work.

Bill,
infact, the wrong relative URL caused this 404 page error. Inserting and replacing a document works now.
For example replacing the password looks as follows:

newElement.loadXML = “tiger"
resp = tx.InoReplaceChild (”/Telephone/@1", “Telephone/PassWord”, newElement)

But how do I have to formulate the query when I want to remove an node?
I tried several different ways, all failed, e.g:

resp = tx.InoRemoveChild ("/Telephone/@1", “Telephone/Append”)
resp = tx.InoRemoveChild ("/Telephone/@1", “./Append”)
resp = tx.InoRemoveChild ("/Telephone/@1", “Append”)

What XPath query do I have to provide when I’d like to remove the first element of my element?

Thanks, ren

This works for me:
inoResponse = tamino.InoRemoveChild("/Telephone/@1",“Telephone/Append[1]”);
where [1] is the instance number of the Append child node you want to remove. If it doesn’t exist you get an “XPath not found” error. If it’s not unique you get an “XPath not unique” error.

HTH
Bill