Thank you for trying to help - I am still very new to XML::Twig and I am probably not doing things as efficiently as I could be. (Sorry for the typo with $xml in the above code - I fixed it.)

I'm trying to extract certain attributes from a small set of tags in the XML document referenced above. Specifically, the UML:Class tags contain UML:Attribute tags, and I want to extract the name and xmi.id attributes from them. The general structure of this portion of the document looks like this:

<UML:Class> <UML:Attribute></UML:Attribute> <UML:Attribute></UML:Attribute> <UML:Attribute></UML:Attribute> </UML:Class>
A complete example is shown under the readmore.
<UML:Class name="Gel2d" xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92" visibility="public" namespace="EAPK_AEE09178_6653_49a3_91E8_ +7CD6004767CA" isRoot="false" isLeaf="false" isAbstract="false" isActi +ve="false"> <UML:GeneralizableElement.generalization xmi.id="EAID_6AF3DB85_3 +AFE_4843_B8D3_0E61B46C6D92_fix_0"> <Foundation.Core.Generalization xmi.idref="EAID_8E74DB6E_6F4A_ +451b_A1E2_17F60ED264AE" xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B46C +6D92_fix_0_fix_0" /> </UML:GeneralizableElement.generalization> <UML:Classifier.feature xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2"> <UML:Attribute name="loading" changeable="none" visibility="pu +blic" ownerScope="instance" targetScope="instance" xmi.id="EAID_6AF3D +B85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_0"> <UML:StructuralFeature.multiplicity xmi.id="EAID_6AF3DB85_3A +FE_4843_B8D3_0E61B46C6D92_fix_2_fix_0_fix_0"> <UML:Multiplicity xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2_fix_0_fix_0_fix_0"> <UML:Multiplicity.range xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_0_fix_0_fix_0_fix_0"> <UML:MultiplicityRange lower="1" upper="1" xmi.id="EAI +D_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_0_fix_0_fix_0_fix_0_ +fix_0" /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:Attribute.initialValue xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_0_fix_1"> <UML:Expression xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92_fix_2_fix_0_fix_1_fix_0" /> </UML:Attribute.initialValue> <UML:StructuralFeature.type xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_0_fix_2"> <Foundation.Core.Classifier xmi.idref="eaxmiid3" xmi.id="E +AID_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_0_fix_2_fix_0" /> </UML:StructuralFeature.type> </UML:Attribute> <UML:Attribute name="minPhRange" changeable="none" visibility= +"public" ownerScope="instance" targetScope="instance" xmi.id="EAID_6A +F3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_1"> <UML:StructuralFeature.multiplicity xmi.id="EAID_6AF3DB85_3A +FE_4843_B8D3_0E61B46C6D92_fix_2_fix_1_fix_0"> <UML:Multiplicity xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2_fix_1_fix_0_fix_0"> <UML:Multiplicity.range xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_1_fix_0_fix_0_fix_0"> <UML:MultiplicityRange lower="1" upper="1" xmi.id="EAI +D_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_1_fix_0_fix_0_fix_0_ +fix_0" /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:Attribute.initialValue xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_1_fix_1"> <UML:Expression xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92_fix_2_fix_1_fix_1_fix_0" /> </UML:Attribute.initialValue> <UML:StructuralFeature.type xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_1_fix_2"> <Foundation.Core.Classifier xmi.idref="eaxmiid3" xmi.id="E +AID_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_1_fix_2_fix_0" /> </UML:StructuralFeature.type> </UML:Attribute> <UML:Attribute name="maxPhRange" changeable="none" visibility= +"public" ownerScope="instance" targetScope="instance" xmi.id="EAID_6A +F3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_2"> <UML:StructuralFeature.multiplicity xmi.id="EAID_6AF3DB85_3A +FE_4843_B8D3_0E61B46C6D92_fix_2_fix_2_fix_0"> <UML:Multiplicity xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2_fix_2_fix_0_fix_0"> <UML:Multiplicity.range xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_2_fix_0_fix_0_fix_0"> <UML:MultiplicityRange lower="1" upper="1" xmi.id="EAI +D_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_2_fix_0_fix_0_fix_0_ +fix_0" /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:Attribute.initialValue xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_2_fix_1"> <UML:Expression xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92_fix_2_fix_2_fix_1_fix_0" /> </UML:Attribute.initialValue> <UML:StructuralFeature.type xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_2_fix_2"> <Foundation.Core.Classifier xmi.idref="eaxmiid3" xmi.id="E +AID_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_2_fix_2_fix_0" /> </UML:StructuralFeature.type> </UML:Attribute> <UML:Attribute name="firstDimDate" changeable="none" visibilit +y="public" ownerScope="instance" targetScope="instance" xmi.id="EAID_ +6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_3"> <UML:StructuralFeature.multiplicity xmi.id="EAID_6AF3DB85_3A +FE_4843_B8D3_0E61B46C6D92_fix_2_fix_3_fix_0"> <UML:Multiplicity xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2_fix_3_fix_0_fix_0"> <UML:Multiplicity.range xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_3_fix_0_fix_0_fix_0"> <UML:MultiplicityRange lower="1" upper="1" xmi.id="EAI +D_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_3_fix_0_fix_0_fix_0_ +fix_0" /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:Attribute.initialValue xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_3_fix_1"> <UML:Expression xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92_fix_2_fix_3_fix_1_fix_0" /> </UML:Attribute.initialValue> <UML:StructuralFeature.type xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_3_fix_2"> <Foundation.Core.Classifier xmi.idref="eaxmiid4" xmi.id="E +AID_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_3_fix_2_fix_0" /> </UML:StructuralFeature.type> </UML:Attribute> <UML:Attribute name="secondDimDate" changeable="none" visibili +ty="public" ownerScope="instance" targetScope="instance" xmi.id="EAID +_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_4"> <UML:StructuralFeature.multiplicity xmi.id="EAID_6AF3DB85_3A +FE_4843_B8D3_0E61B46C6D92_fix_2_fix_4_fix_0"> <UML:Multiplicity xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E6 +1B46C6D92_fix_2_fix_4_fix_0_fix_0"> <UML:Multiplicity.range xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_4_fix_0_fix_0_fix_0"> <UML:MultiplicityRange lower="1" upper="1" xmi.id="EAI +D_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_4_fix_0_fix_0_fix_0_ +fix_0" /> </UML:Multiplicity.range> </UML:Multiplicity> </UML:StructuralFeature.multiplicity> <UML:Attribute.initialValue xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_4_fix_1"> <UML:Expression xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B +46C6D92_fix_2_fix_4_fix_1_fix_0" /> </UML:Attribute.initialValue> <UML:StructuralFeature.type xmi.id="EAID_6AF3DB85_3AFE_4843_ +B8D3_0E61B46C6D92_fix_2_fix_4_fix_2"> <Foundation.Core.Classifier xmi.idref="eaxmiid4" xmi.id="E +AID_6AF3DB85_3AFE_4843_B8D3_0E61B46C6D92_fix_2_fix_4_fix_2_fix_0" /> </UML:StructuralFeature.type> </UML:Attribute> </UML:Classifier.feature> <UML:Namespace.ownedElement xmi.id="EAID_6AF3DB85_3AFE_4843_B8D3 +_0E61B46C6D92_fix_3"> <UML:Generalization child="EAID_6AF3DB85_3AFE_4843_B8D3_0E61B4 +6C6D92" parent="EAID_68C27150_2324_4f98_AECD_172A1251AB21" xmi.id="EA +ID_8E74DB6E_6F4A_451b_A1E2_17F60ED264AE" visibility="public" /> </UML:Namespace.ownedElement> </UML:Class>

If I understand how XML::Twig works, a section of the tree is sent to a handler when the closing tag is reached. Therefore, for the simplified example above, each of the UML:Attribute sections will get parsed before the corresponding UML:Class section is parsed. I would like to parse the Class first (so I don't have to jump through hoops to associate the Attribute data with the Class data later), which is why the handler for UML:Attribute is located in the handler for UML:Class.

I admit that it seems inefficient to call sprint and then parse. I took that snippet from GrandFather's example. Is there a better way to do it?

I hope that clarifies what I'm trying to do. I'd appreciate any suggestions that you might have. Thanks.


In reply to Re^4: Pulling out sections of an XMI file with XML::Twig by bobf
in thread Pulling out sections of an XMI file with XML::Twig by bobf

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.