Wrox Programmer Forums
Go Back   Wrox Programmer Forums > XML > XML
|
XML General XML discussions.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the XML section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old March 29th, 2005, 08:33 AM
Registered User
 
Join Date: Mar 2005
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to chaitanyaXML Send a message via MSN to chaitanyaXML Send a message via Yahoo to chaitanyaXML
Default to get Distinct Node depending on attribute value

Hi,

The following is the xml generated by save method on recordset.

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
    xmlns:rs='urn:schemas-microsoft-com:rowset'
    xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
    <s:ElementType name='row' content='eltOnly'>
        <s:AttributeType name='PGDT_SYS_NO' rs:number='1' rs:writeunknown='true'>
            <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true' rs:maybenull='false'/>
        </s:AttributeType>
        <s:AttributeType name='PGDT_DEFAULT_PRIORITY' rs:number='2' rs:nullable='true' rs:writeunknown='true'>
            <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='15' rs:fixedlength='true'/>
        </s:AttributeType>
        <s:AttributeType name='PGDT_DCLS_SYS_NO' rs:number='3' rs:writeunknown='true'>
            <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true' rs:maybenull='false'/>
        </s:AttributeType>
        <s:AttributeType name='PGDT_DTYP_SYS_NO' rs:number='4' rs:writeunknown='true'>
            <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true' rs:maybenull='false'/>
        </s:AttributeType>
        <s:AttributeType name='PGDT_PG_SYS_NO' rs:number='5' rs:writeunknown='true'>
            <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true' rs:maybenull='false'/>
        </s:AttributeType>
        <s:extends type='rs:rowbase'/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <z:row PGDT_SYS_NO='1' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='27' PGDT_DTYP_SYS_NO='21' PGDT_PG_SYS_NO='1'/>
    <z:row PGDT_SYS_NO='768' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='27' PGDT_DTYP_SYS_NO='70' PGDT_PG_SYS_NO='1'/>
    <z:row PGDT_SYS_NO='1742' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='37' PGDT_DTYP_SYS_NO='56' PGDT_PG_SYS_NO='1'/>
    <z:row PGDT_SYS_NO='466' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='27' PGDT_DTYP_SYS_NO='23' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='467' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='24' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='468' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='63' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='469' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='25' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='470' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='26' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='471' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='27' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='472' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='58' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='473' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='76' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='474' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='54' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='475' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='55' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='476' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='28' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='4084' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='35' PGDT_PG_SYS_NO='3'/>
    <z:row PGDT_SYS_NO='478' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='29' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='479' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='24' PGDT_DTYP_SYS_NO='36' PGDT_PG_SYS_NO='6'/>
    <z:row PGDT_SYS_NO='4085' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='36' PGDT_PG_SYS_NO='3'/>
    <z:row PGDT_SYS_NO='4086' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='55' PGDT_PG_SYS_NO='3'/>
    <z:row PGDT_SYS_NO='4087' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='56' PGDT_PG_SYS_NO='3'/>
    <z:row PGDT_SYS_NO='4088' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='57' PGDT_PG_SYS_NO='3'/>
    <z:row PGDT_SYS_NO='4089' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='26' PGDT_DTYP_SYS_NO='58' PGDT_PG_SYS_NO='3'/>

.
.
.
.
</rs:data>
</xml>



Qustion:

1)I would like to know how to access the z:row nodes using absolute path.I am using the following xmldom.selectnodes("/xml/z") but this doesn't work.neither this xmldom.selectnodes("//z").

2)I would like to get Z:row nodes with a particular 'PGDT_DCLS_SYS_NO' value and unique PGDT_PG_SYS_NO values.
for eg I want the following nodes to be output
 <z:row PGDT_SYS_NO='1' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='27' PGDT_DTYP_SYS_NO='21' PGDT_PG_SYS_NO='1'/>
<z:row PGDT_SYS_NO='1742' PGDT_DEFAULT_PRIORITY='1' PGDT_DCLS_SYS_NO='27' PGDT_DTYP_SYS_NO='56' PGDT_PG_SYS_NO='6'/>

Thanks,
Chaitanya





chaitanya
 
Old March 29th, 2005, 08:50 AM
mhkay's Avatar
Wrox Author
 
Join Date: Apr 2004
Posts: 4,962
Thanks: 0
Thanked 292 Times in 287 Posts
Default

Generating an element called <xml> is a really bad idea, because names beginning with "xml" are reserved for use in future standards. Shows how carefully some vendors read the specs.

The name of the z:row elements is z:row, not z, so to select them, you need a path expression such as /xml/rs:data/z:row. If I remember rightly, the Microsoft XPath API takes the namespace context for an XPath expression from the node used as the target of the selectNodes() call, which is OK in cases like this where the namespaces are all declared on the outermost element.

Then you want to add a predicate such as

/xml/rs:data/z:row[@PGDT_DCLS_SYS_NO='26'][
  not(@PGT_DTYP_SYS_NO = preceding-sibling::z:row[@PGDT_DCLS_SYS_NO='26']/@PGT_DTYP_SYS_NO)]

A bit clumsy - it would be much easier in XPath 2.0.





Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference
 
Old March 29th, 2005, 09:11 AM
Registered User
 
Join Date: Mar 2005
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to chaitanyaXML Send a message via MSN to chaitanyaXML Send a message via Yahoo to chaitanyaXML
Default

Hi,

When I use the Xpath as "/xml/rs:data/z:row" I get the following error

reference to undeclared namespace prefix:'rs'

Please advice if I have to set any other property to the xmldom to recognize this namespace or xpath.

chaitanya
 
Old March 29th, 2005, 09:18 AM
Registered User
 
Join Date: Mar 2005
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to chaitanyaXML Send a message via MSN to chaitanyaXML Send a message via Yahoo to chaitanyaXML
Default

Hi,

We are using VB and XML version 4.0.

chaitanya
 
Old March 29th, 2005, 09:52 AM
joefawcett's Avatar
Wrox Author
 
Join Date: Jun 2003
Posts: 3,074
Thanks: 1
Thanked 38 Times in 37 Posts
Default

You need declare the namespaces and prefixes. If you are using selectNodes then read the documentation for setProperty and SelectionNamespaces.

http://msdn.microsoft.com/library/de...asp?frame=true

If you are using XSLT then read http://www.dpawson.co.uk/xsl/sect2/N5536.html, especially number 13.


--

Joe (Microsoft MVP - XML)
 
Old March 29th, 2005, 10:26 AM
Registered User
 
Join Date: Mar 2005
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to chaitanyaXML Send a message via MSN to chaitanyaXML Send a message via Yahoo to chaitanyaXML
Default

Thank you very much Joe.It's working fine after setting the properties.

Hi Michael,
The predicates are working fine when used separately,but not when both are combined.I mean [@PGDT_DCLS_SYS_NO='26'] works fine and
[not(@PGT_DTYP_SYS_NO = preceding-sibling::z:row[@PGDT_DCLS_SYS_NO='26']/@PGT_DTYP_SYS_NO)] works fine when used differently and not combined.

Thanks


chaitanya





Similar Threads
Thread Thread Starter Forum Replies Last Post
Get a node value using attribute name IronStar XSLT 4 May 29th, 2008 04:28 PM
Convert attribute to node-set using xalan Coolcampers XSLT 1 May 3rd, 2008 06:06 AM
getting distinct values from attribute markus2000 XSLT 1 June 13th, 2006 03:06 AM
how to get values depending on the attribute vidhya XSLT 1 July 8th, 2005 03:55 AM
How can I get the element node of an attribute cdias XSLT 2 March 15th, 2004 10:34 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.