Hi Sharon,
Basically i get syntax error on trying to write any python code in
it is a syntax error problem...
<script>
[machine_name] = STAXResult
length = len(machine_name)
</script>
Python code compile failed for:
[machine_name] =STAXResult
print machine_name
Traceback(innermost last):
(no code object at line 0)
SyntaxError : ('invalidsyntax',('<string>',3,27,' print \t\t\t length =
len(machine_name')))
Do we have to import anything inside the script tags to make the code work
??
Regards
Sanrgam
On Sat, Aug 1, 2009 at 1:01 AM, Sangram Bakshi <san...@gmail.com> wrote:
> Hi Sharon,
>
> Thanks for your quick reply.
> I am rather new to xml parsing ,so your help will be highly appreciated and
> would be a time saver.
>
> My intent is to parse the xml file get values from it and :
> ===========================================
> The XML file is :
>
>
> * * <?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>
>
> I want to parse the above file and collect
> 1. All the machine_name in a list variable in a variable say mac_name
> 2. All the vmware tag attributes in a list variable say vmware_attr and
> corresponding values in another list variable say vmware_value
>
> I am parsing the above in the function "parseXML" as mentioned below.
>
> In doing so i was getting the following problems.
>
> 1. I was not able to get all the mach names in the list variable mac_name
> , i only got the last one *xyz.pxy.dxe.cde*
> *when i want all the three u80sp1_L004 u80sp1_L004 and xyz.pxy.dxe.cde.*
> **
> *But when i changed the xml file a little bit i could get all the values .
> *
> **
> *I had only one machine_name tag this way
> <machine_name> u80sp1_L004,u80sp1_L004,xyz.pxy.dxe.cde<\machine_name>. It
> worked this way.*
> **
> *My question how : could i still parse it with three tags with same name.*
> **
> **
> 2. When i collect the three machine names and return it and try to get the
> length i get error. (length = len(mach_name))
>
> 3. I am not sure how to get the vmware tag attributes and vmware tag
> values.
>
>
> The code i am using is :
>
> I think the code need to be modified a little bit to get the values
> properly/ or even maybe the xml format to be modified to parse properly.
>
>
> <?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>
>
> [vmware_value, mach_name,vmware_attr] = STAXResult
>
> length = len(mach_name) /*any issue in using it this way, i
> get error here*/
>
> </script>
>
> <log message="1">'vmware_value: %s' % (name)</log>
> <log message="1">'mach_name: %s' % (mach_name)</log>
> <log message="1">'vmware_attr: %s' % (vmware_attr)</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>
> vmware_attr = None
> mach_name = None
> vmware_value = None
> # 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):
> 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):
> mach_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):
> name = thisChild.getNodeValue()
>
> # 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):
> vmware_value = thisChild.getNodeValue()
> vmware_attr = thisChild.getNodeAttribure() /* I GET ERROR
> HERE ALSO ,NOT ABLE TO GET ATTR*/
>
>
> </script>
> <return>[vmware_attr,vmware_value, mach_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>
>
> Regards
> Sangram
>
> On Fri, Jul 31, 2009 at 10:57 PM, Sharon Lucas <luc...@us.ibm.com> wrote:
>
>>
>> Sangram,
>>
>> I need more information as you didn't provide the contents of function
>> "parseXML". Perhaps it isn't returning what you think it is. You should
>> add more debugging to log the value of variable machine_name and its type.
>> Note that if the len() function works on PyStrings and PyList, so that's
>> why it is important to understand what type of variable machine_name is, as
>> well as what its value is. Also, what is the complete error information
>> that you are getting. Note that it would be helpful to provide the complete
>> STAX job so that we could run it to recreate the problem (e.g. you didn't
>> provide function "parseXML" so I don't know what exactly it is returning).
>>
>> Change your STAX xml function to the following so that you can see what
>> variable machine_name's value and type is and provide the log output and
>> error information.
>>
>> <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">'type(machine_name)=%s' %
>> (type(machine_name))</log>*
>> *<log message="1">'machine_name=%s' % (machine_name)</log>*
>>
>> <script>length = len(machine_name)</script>
>> <log message="1">'len(machine_name)=%s' % (length)</log>
>>
>> <log message="1">'Name: %s' % (name)</log>
>> <log message="1">'Machine_name: %s' % (machine_name)</log>
>> </sequence>
>> </function>
>> </stax>
>>
>> --------------------------------------------------------------
>> Sharon Lucas
>> IBM Austin, luc...@us.ibm.com
>> (512) 286-7313 or Tieline 363-7313
>>
>>
>>
>> *Sangram Bakshi <san...@gmail.com>*
>>
>> 07/31/2009 11:46 AM
>> To
>> staf-users@lists.sourceforge.net cc
>> Subject
>> [staf-users] Error in using jython funtion len()
>>
>>
>>
>>
>> Hi ,
>>
>>
>> In the following stax job i am trying to read the length of a list
>> machine_name.
>> But i get syntax error while trying to do so . The code is highlighted in
>> yellow.
>>
>> <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
>>
>> length = len(machine_name) ========> i am getting syntax error
>> here ...is this a wrong way to do in this section?
>>
>> </script>
>> <log message="1">'Name: %s' % (name)</log>
>> <log message="1">'Machine_name: %s' % (machine_name)</log>
>> </sequence>
>> </function>
>> </stax>
>>
>> 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