Hi David,
Thanks for the information.
Actually what i wanto achieve is to read the following xml file:
<?xml version="1.0" encoding="utf-8"?>
<operating_system>
<unix_80sp1>
<tests type="quick_sanity_test">
<prerequisitescript>preparequicksanityscript</prerequisitescript>
<acbuildpath>acbuildpath</acbuildpath>
<testsuitscript>test quick sanity script</testsuitscript>
<testdir>quick sanity dir</testdir>
</tests>
<machine_name>u80sp1_L004</machine_name>
<machine_name>u80sp1_L005</machine_name>
<machine_name>xyz.pxy.dxe.cde</machine_name>
<vmware id="155.35.3.55">144.35.3.90</vmware>
<vmware id="155.35.3.56">144.35.3.91</vmware>
</unix_80sp1>
</operating_system>
For a single tag i am able to get the values for e.g:
<acbuildpath>acbuildpath</acbuildpath>
by using the following piece of code:
nodeList = document.getElementsByTagName("acbuildpath")
for i in range(nodeList.getLength()):
node = nodeList.item(i)
if node.getNodeType() == Node.ELEMENT_NODE:
children = node.getChildNodes()
for j in range(children.getLength()):
thisChild = children.item(j)
if (thisChild.getNodeType() == Node.TEXT_NODE):
acbuildpath = thisChild.getNodeValue()
so now acbuildpath gives me the value in tag acbuild path:
This goes fine.
Now in the same xml file there is a tag "machine_name". This tag appears
thrice in the xml file .What i want to achieve is read all these values in a
list variable. So i am not sure what correction i should do in the code so
that i can capture all the three "machine_name" tag values from the
mentioned xml file.
Also there is a tag named as "vmware" in the xml file .The format of the tag
is <vmware id="155.35.3.55">144.35.3.90</vmware>
There are two tags like this .
Here in the tag the first ip is the attribute of the tag , and second is
the value of the tag. I want to read all attributes into a list
and all the values into another list.(as there are two such tags).
So what correction i need to do in the above code to achieve this.
Kinldy suggest(it would be a time saver). I am also trying to solve in
between by looking in the internet materials that you have suggested.
Regards
Sangram
On Thu, Jul 30, 2009 at 7:54 PM, David Bender <bda...@us.ibm.com> wrote:
>
> I'm not sure exactly what's wrong with your job, but we provide the
> following STAX job: http://staf.sourceforge.net/current/getLatest.xml which
> you may want to use as an example, since it does some similar
> processing (for example it parses for multiple <file> elements).
>
> Actually the DocumentBuilderFactory and related classes are Java classes
> (not Jython), so searching on the web for the following should provide some
> useful links.
>
> javax.xml.parsers.DocumentBuilderFactory
> javax.xml.parsers.DocumentBuilder
> org.w3c.dom.Document
> org.w3c.dom.Element
> org.w3c.dom.Node
> org.w3c.dom.NodeList
>
> Thanks,
> David
>
> ------------------------------
> *David
> Bender*<http://w3.ibm.com/bluepages/simpleSearch.wss?searchBy=Name&searchFor=David+Bender>
> STAF/STAX Development
> IBM Software Group, WPLC
> 11501 Burnet Rd.
> Bldg. 903-5B002
> Austin, TX 78758-3400
> Phone (T/L): 1-512-286-5315 (363-5315)
> ITN: 23635315
> Email: *bda...@us.ibm.com* <bda...@us.ibm.com>
>
>
> ------------------------------
>
>
>
> *Sangram Bakshi <san...@gmail.com>*
>
> 07/30/2009 05:17 AM
> To
> staf-users@lists.sourceforge.net cc
> Subject
> [staf-users] Parsing a xml file using document builder factory.
>
>
>
>
> Hi ,
>
> This is not really related to STAF and STAX , but would be a time saver .I
> am quite new to jython xml parsing using document builder.
> I am trying to read a xml file of the following format in the staf and stax
> job xml file:
>
> <?xml version="1.0" encoding="utf-8"?>
> <operating_system>
> <unix_80sp1>
> <tests type="quick_sanity_test">
> <prerequisitescript>preparequicksanityscript</prerequisitescript>
> <acbuildpath>acbuildpath</acbuildpath>
> <testsuitscript>test quick sanity script</testsuitscript>
> <testdir>quick sanity dir</testdir>
> </tests>
> <machine_name>u80sp1_L004</machine_name>
> <machine_name>u80sp1_L005</machine_name>
> <machine_name>xyz.pxy.dxe.cde</machine_name>
> <vmware id="155.35.3.55">144.35.3.90</vmware>
> <vmware id="155.35.3.56">144.35.3.91</vmware>
> </unix_80sp1>
> </operating_system>
>
> Here machine_name tag can be n number. I need to read all the machine_name
> tags in an array , so that i can use them later.
> Also i need to read all the vmware tags in an array (both value and
> attributes) so that i can use them later. The number of vmware tags can
> again be n numbers.
>
> I am trying the following code :
>
> <!-- *******************************************************************
> -->
> <!-- Following function is used to parse an XML file and return the DOM
> -->
> <!-- document object
> -->
> <!-- *******************************************************************
> -->
> <function name="parseXML" scope="local">
> <function-list-args>
> <function-required-arg name="xmlFileName">
> Name of file containing XML to be parsed
> </function-required-arg>
> </function-list-args>
> <sequence>
> <!-- Parse the XML -->
> <script>
> factory = DocumentBuilderFactory.newInstance();
> factory.setValidating(1)
> factory.setIgnoringElementContentWhitespace(0)
> builder = factory.newDocumentBuilder()
> document = builder.parse(xmlFileName)
>
> </script>
> <script>
>
> vmware = None
> machine_name = None
>
> # Get the text value for the element with tag name "vmware"
> nodeList = document.getElementsByTagName("vmware")
> for i in range(nodeList.getLength()):
> node = nodeList.item(i)
> if node.getNodeType() == Node.ELEMENT_NODE:
> children = node.getChildNodes()
> for j in range(children.getLength()):
> thisChild = children.item(j)
> if (thisChild.getNodeType() == Node.TEXT_NODE):
> machine_name = thisChild.getNodeValue()
>
> # Get the text value for the element with tag name "machine_name"
> nodeList = document.getElementsByTagName("vmware")
> for i in range(nodeList.getLength()):
> node = nodeList.item(i)
> if node.getNodeType() == Node.ELEMENT_NODE:
> children = node.getChildNodes()
> for j in range(children.getLength()):
> thisChild = children.item(j)
> if (thisChild.getNodeType() == Node.TEXT_NODE):
> machine_name = thisChild.getNodeValue()
>
> </script>
> <return>[machine_name,vmware]</return>
> </sequence>
> </function>
>
>
> I am able to read only one value for machine_name (u80sp1_L005) and also
> one value for vmware
> i.e 144.35.3.91.
>
> Also a good link to understand parsing in jython using doumentbilder
> factory would be good help.
>
> Regards
> Sangram
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
>
> trial. Simplify your report design, integration and deployment - and focus
> on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.
> http://p.sf.net/sfu/bobj-july_______________________________________________
> staf-users mailing list
> staf-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/staf-users
>
>
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users