You can have multiple lines of Python code within a <script> element, as 
long as it is all valid Python code.  You just keep introducing errors in 
your Python code.  :-) 

Note that in the following error message, the error message pointing to a 
syntax error in line 3, column 27 of your <script> element:

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')))

The error message shows that you have a unmatched single quote after 
machine_name.

<script>
  [machine_name] = STAXResult
  print machine_name
  length = len(machine_name')    # Note the single quote that is causing 
the error
</script>

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




Sangram Bakshi <san...@gmail.com> 
07/31/2009 11:54 PM

To
Sharon Lucas/Austin/i...@ibmus
cc
staf-users@lists.sourceforge.net
Subject
Re: [staf-users] Error in using jython funtion len()






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

Reply via email to