Hi Sharon,
Thanks for the inputs , actually i am using xml as i am trying to take
inputs from a GUI , i take the input then write to the xml , then parse this
xml to get the values into the stax job.
Also i tried your inputs it parses and gets the value properly. Thanks.
I tried to parse the string machine_name which is returned after parsing the
xml file
MyXml.xml .
In <script>
[name, machine_name] = STAXResult
</script>
array_machine = machine_name.split(',')
and get them into array_machine[0] ..[1] [2] etc
inorder to get the individual ip adresses , but i am getting error using
this method of parsing .
Is there any other method to do so .I know this is not a STAX question ,
but it will save me time if i get some pointers.
Regards
Sangram
On Mon, Apr 6, 2009 at 11:22 PM, Sharon Lucas <luc...@us.ibm.com> wrote:
>
> Note that this is not really a STAF or STAX question. This is simply a
> question of how in Jython can I use a parse an xml file to get the values
> for the text nodes for elements "name" and "machine_name".
>
> Also, why are you using an xml file when instead you could simply use a
> file that contains Python code to set the values for variables name and
> machine_name? For example, you could simply create a file,
> C:\myScriptFile.py, that contains:
>
> name = 'QuickSanity'
> machine_name = '155.35.3.79,155.63.3.89,155.62.3.91'
>
> And then specify the name of this file as the value for the SCRIPTFILE
> option on your STAX EXECUTE request (or similarly via the STAX Monitor).
> For example:
>
> STAF staxMachine STAX EXECUTE FILE "C:/yourStaxJob.xml' SCRIPTFILE
> "C:/myScriptFile.py"
>
> Then you would be able to reference Python variables name and machine_name
> from within your STAX job with no xml parsing required.
>
> But, in case you have a good reason for the data only being available in an
> xml file, here's an example of a STAX job that parses your xml file and gets
> the values for the "name" and "machine_name" elemenst in the xml file.
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <!DOCTYPE stax SYSTEM "stax.dtd">
> <stax>
> <defaultcall function="Main"/>
>
> <function name="Main">
> <sequence>
>
> <!-- Assign the file name of a STAX xml document you want to parse
> -->
> <call function="'parseXML'">'c:/MyXml.xml'</call>
>
> <script>
> [name, machine_name] = STAXResult
> </script>
>
> <log message="1">'Name: %s' % (name)</log>
> <log message="1">'Machine_name: %s' % (machine_name)</log>
>
> </sequence>
> </function>
>
> <!-- *******************************************************************
> -->
> <!-- Following function is used to parse an XML file and get the text
> -->
> <!-- values for the name and machine_name elements
> -->
> <!-- *******************************************************************
> -->
> <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>
> name = None
> machine_name = None
>
> # Get the text value for the element with tag name "name"
>
> nodeList = document.getElementsByTagName("name")
>
> 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):
> name = thisChild.getNodeValue()
>
> # Get the text value for the element with tag name "machine_name"
>
> nodeList = document.getElementsByTagName("machine_name")
>
> 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>[name, machine_name]</return>
>
> </sequence>
> </function>
>
> <script>
> # These imports only need to be done once per job, no matter
> # how many xml documents are parsed
> from java.io import File
> from java.io import StringReader
> from org.xml.sax import InputSource
> from org.xml.sax import SAXParseException
> from org.xml.sax.helpers import DefaultHandler
> from javax.xml.parsers import DocumentBuilderFactory
> from javax.xml.parsers import DocumentBuilder
> from org.w3c.dom import Document
> from org.w3c.dom import Element
> from org.w3c.dom import Node
> from org.w3c.dom import NodeList
> </script>
>
> </stax>
>
>
> --------------------------------------------------------------
> Sharon Lucas
> IBM Austin, luc...@us.ibm.com
> (512) 286-7313 or Tieline 363-7313
>
>
>
> *Sangram Bakshi <san...@gmail.com>*
>
> 04/06/2009 08:01 AM
> To
> staf-users@lists.sourceforge.net cc
> Subject
> [staf-users] Parsing a XML file in a stax job.
>
>
>
>
> Hi ,
>
> I am trying to parse a xml file and read values for it. For this i am
> trying to use the DocumentBuilderFactory.
> The xml i am trying to read is :
>
> <?xml version='1.0' encoding='utf-8'?>
> <Mydata>
> <name>QuickSanity</name>
> <machine_name>155.35.3.79,155.63.3.89,155.62.3.91</machine_name>
> </Mydata>
>
> I want to read the data in tag's <name> , <machine_name> (the array of ip
> address ). I want to read these values and store them in
> variables so that i can use them in my stax job later on.
>
> I am parsing them this way:
>
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <!DOCTYPE stax SYSTEM "stax.dtd">
> <stax>
> <defaultcall function="Main"/>
>
> <function name="Main">
> <sequence>
>
> <!-- Assign the file name of a STAX xml document you want to parse
> -->
> <call function="'parseXML'">'c:/MyXml.xml'</call>
> <script>
> document = STAXResult
>
> <I am not sure sure how to use the document builder API to get the
> xml files values here>
>
> msg = '%s\nFound %s element ' % (msg,
> root.getElementsByTagName("name"))
>
> for i in range(children.getLength()):
> thisChild = children.item(i);
>
> if (thisChild.getNodeType() == Node.ELEMENT_NODE and
> thisChild.getNodeName() == 'defaultcall'):
> msg = '%s\nFound defaultcall element' % (msg)
> elif thisChild.getNodeType() == Node.COMMENT_NODE:
> # Do nothing
> continue
> elif thisChild.getNodeType() == Node.ELEMENT_NODE:
> msg = '%s\nFound %s element ' % (msg, thisChild.getNodeName())
>
> </script>
> <message>'Some parsed data: %s' % (msg)</message>
> <log>'Some parsed data: %s' % (msg)</log>
>
>
> </sequence>
> </function>
>
> <!-- *******************************************************************
> -->
> <!-- 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>
> <return>document</return>
> </sequence>
> </function>
> <script>
> # These imports only need to be done once per job, no matter
> # how many xml documents are parsed
> from *java.io* <http://java.io/> import File
> from *java.io* <http://java.io/> import StringReader
> from org.xml.sax import InputSource
> from org.xml.sax import SAXParseException
> from org.xml.sax.helpers import DefaultHandler
> from javax.xml.parsers import DocumentBuilderFactory
> from javax.xml.parsers import DocumentBuilder
> from org.w3c.dom import Document
> from org.w3c.dom import Element
> from org.w3c.dom import Node
> from org.w3c.dom import NodeList
> </script>
> </stax>
>
>
>
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> staf-users mailing list
> staf-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/staf-users
>
>
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users