Avatar billede ihtezaz Praktikant
05. april 2009 - 23:04 Der er 9 kommentarer og
1 løsning

Vide antal af child nodes

Hej, jeg har nedenstående XML, jeg vil gerne vide antal af child nodes som elementet Registrants har.
Jeg bruger nedenstående xpath expression for at hente IDNumber på det sidste node, men for at vide hvor mange IDNumber jeg skal hente, har jeg brug for at vide antallet af Registrant noder som Registrants har som childnodes. På forhånd tak.

WS_XPATH(env,'/soap:Envelope/soap:Body/CRMOnline:GetRegInfoResponse/CRMOnline:CRMRegistrationInfoResponse/Registrations/Registration/Registrants/Registrant[last()]/IDNumber/text()',namespace);


<Registrants>
<Registrant>
<IDType>SE</IDType>
<IDNumber>31270308</IDNumber>
<UserType>PRIMÆR BRUGER</UserType>
<Name>KAARSBERG TRANSPORT APS</Name>
<RegistrationDate>01/04-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
<Registrant>
<IDType>SE</IDType>
<IDNumber>10157676</IDNumber>
<UserType>PRIMÆR EJER</UserType>
<Name>JYSKE FINANS A/S</Name>
<RegistrationDate>01/04-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
<Registrant>
<IDType>CPR</IDType>
<IDNumber></IDNumber>
<UserType>BRUGER</UserType>
<Name>Madsen, Brian</Name>
<RegistrationDate>13/08-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
</Registrants>
Avatar billede ihtezaz Praktikant
05. april 2009 - 23:07 #1
Hov.. sådan ser min xpath ud.

WS_XPATH(env,'/soap:Envelope/soap:Body/CRMOnline:GetRegInfoResponse/CRMOnline:CRMRegistrationInfoResponse/Registrations/Registration/Registrants/Registrant[last()]/IDNumber/text()',namespace);
Avatar billede arne_v Ekspert
05. april 2009 - 23:17 #2
count('/Registrants/Registrant')
Avatar billede arne_v Ekspert
05. april 2009 - 23:18 #3
Hvorfor parser du SOAP XML manuelt ?

Normal kan man generere stub kode.
Avatar billede ihtezaz Praktikant
05. april 2009 - 23:36 #4
Hej Arne,

Jeg har forsøgt med følgende:

WS_XPATH(env,'count(/soap:Envelope/soap:Body/CRMOnline:GetRegInfoResponse/CRMOnline:CRMRegistrationInfoResponse/Registrations/Registration/Registrants/Registrant)',namespace);


Men Jeg får epath expression not supported.
mm.. jeg kunne ikke rigtig finde anden måde at hente xml response, jeg er nybegynder på PL/SQL og derfor har jeg parset SOAP manuelt.
Avatar billede ihtezaz Praktikant
05. april 2009 - 23:37 #5
WS_XPATH(env,'count(/soap:Envelope/soap:Body/CRMOnline:GetRegInfoResponse/
CRMOnline:CRMRegistrationInfoResponse/
Registrations/Registration/
Registrants/Registrant)',namespace);
Avatar billede arne_v Ekspert
12. april 2009 - 23:55 #6
Der er umligt at sige hvis ikke man har mukighed for at eksperimentere lidt.

Det virker på helleo world niveauet.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="count.xsl"?>
<all>
    <one>A</one>
    <one>BB</one>
    <one>CCC</one>
</all>

og

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:value-of select="count(//all/one)"/>
</xsl:template>
</xsl:stylesheet>

outputter 3 som det skal.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="count2.xsl"?>
<Registrants>
<Registrant>
<IDType>SE</IDType>
<IDNumber>31270308</IDNumber>
<UserType>PRIMÆR BRUGER</UserType>
<Name>KAARSBERG TRANSPORT APS</Name>
<RegistrationDate>01/04-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
<Registrant>
<IDType>SE</IDType>
<IDNumber>10157676</IDNumber>
<UserType>PRIMÆR EJER</UserType>
<Name>JYSKE FINANS A/S</Name>
<RegistrationDate>01/04-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
<Registrant>
<IDType>CPR</IDType>
<IDNumber></IDNumber>
<UserType>BRUGER</UserType>
<Name>Madsen, Brian</Name>
<RegistrationDate>13/08-08</RegistrationDate>
<UnregisteredDate></UnregisteredDate>
</Registrant>
</Registrants>

og

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:value-of select="count(//Registrants/Registrant)"/>
</xsl:template>
</xsl:stylesheet>

outputter også 3.

Så problemet ligger et eller ander sted i SOAP XML'en og namespaces.
Avatar billede jokkejensen Novice
16. april 2009 - 20:16 #7
Det kan være det lige skal dannes til et nodeset, ex

<xsl:variable name="data" select="msxml:node-set('Dit Xpath Der trækker ovenstående ud')" />

<xsl:value-of select="count($data//Registrant)" />
Avatar billede arne_v Ekspert
05. juli 2009 - 22:08 #8
ihtezaz ?
Avatar billede ihtezaz Praktikant
09. februar 2011 - 18:59 #9
Sorry venner jeg røg helt fra det, opgaven blev givet videre til en anden. Arne og Jokke vil i svar, så fordeler jeg points. Tak for indlægene.
Avatar billede arne_v Ekspert
09. februar 2011 - 19:56 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester