Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Adding to an XML file
#1
Hi,

I have a script to write an XML file based on several assets in my 3d package, which works how i'd expect and outputs the below:

Quote:<?xml version="1.0" ?>
<All_Props>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
</All_Props>

Here is my script:

# Firstly we have to import 'xml.etree.ElementTree' for creating a subtree
import xml.etree.ElementTree as ET
from xml.dom import minidom
from pyfbsdk import *

lModels = FBModelList() 

#get the selected models in the scene
FBGetSelectedModels(lModels)

xml_loc = "C:\\Users\\peter.martin\\Desktop\\filename.xml"

FilePath = FBApplication().FBXFileName


mytree = ET.parse(xml_loc)
myroot = mytree.getroot()
    
    
    
def GetFileName(fPath):
    FPsplit = fPath.split('\\')
    FPsplitSplitCount = len(FPsplit)
    FName = fPath.split('\\')[FPsplitSplitCount -1]
    FinalName = FName.split('.FBX')[0]
    return FinalName

def GetRootNode():
    for obj in FBSystem().Scene.Components:
        properties = obj.PropertyList.Find('_root')
        if properties != None:
            return obj.LongName    
  
def create_xml():
    
    FileName = GetFileName(FilePath)
    
    ThePropRoot = GetRootNode()
    
    # we make root element        
    AllProps = ET.Element("All_Props")          
    # create sub element        
    prop = ET.SubElement(AllProps, "prop", name = FileName, location = FilePath, rootbone = ThePropRoot)
         
    # insert list element into sub elements        
    for props in range(len(lModels)):                  
        pr = ET.SubElement(prop, "bone")                
        pr.text = str(lModels[props].LongName)          
        tree = ET.ElementTree(prop)  
            
    # write the tree into an XML file  
    xmlstr = minidom.parseString(ET.tostring(AllProps)).toprettyxml(indent="   ")    
    with open(xml_loc, "w") as f:
        f.write(xmlstr.encode('utf-8'))  

    
create_xml()
What i'd like to do is add more <prop> records/elements, along with the bones etc, so be able to open a scene and add another prop into the XML like below (I duped the prop as an example):



Quote: <?xml version="1.0" ?>
<All_Props>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
</All_Props>

I'm a bit stumped on how to do this in python. Any help would be greatly appreciated :)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  File path by adding various variables Mishal0488 2 1,084 Apr-28-2023, 07:17 PM
Last Post: deanhystad
  How to rename a CSV file by adding MODIFIED in the filename? Python_User 25 8,280 Dec-13-2020, 12:35 PM
Last Post: Larz60+
  Adding markers to Folium map only adding last element. tantony 0 2,158 Oct-16-2019, 03:28 PM
Last Post: tantony
  Adding a 3rd key in a csv file ebolisa 2 2,180 Mar-01-2019, 09:22 AM
Last Post: ebolisa

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020