Skip to main content
Solved

XMLFragmenter/XMLXQuery*: only get root elements

  • April 9, 2024
  • 2 replies
  • 72 views

mariaka
Contributor
Forum|alt.badge.img+14

Hi there,

I don’t see the forest for the trees 🤔

Input data

XML excerpt (source https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/annex-a-xsd.html):

<?xml version='1.0' encoding='ASCII'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ifc="https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/DEV/9d19c824" targetNamespace="https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/DEV/9d19c824" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="uos" type="ifc:uos" abstract="true"/>
<xs:simpleType name="Seq-anyURI">
<xs:list itemType="xs:anyURI"/>
</xs:simpleType>
<xs:complexType name="uos" abstract="true">
<xs:sequence>
<xs:element name="header" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="time_stamp" type="xs:dateTime" minOccurs="0"/>
<xs:element name="author" type="xs:string" minOccurs="0"/>
<xs:element name="organization" type="xs:string" minOccurs="0"/>
<xs:element name="preprocessor_version" type="xs:string" minOccurs="0"/>
<xs:element name="originating_system" type="xs:string" minOccurs="0"/>
<xs:element name="authorization" type="xs:string" minOccurs="0"/>
<xs:element name="documentation" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="optional"/>
<xs:attribute name="express" type="ifc:Seq-anyURI" use="optional"/>
<xs:attribute name="configuration" type="ifc:Seq-anyURI" use="optional"/>
</xs:complexType>
<xs:element name="ifcXML" type="ifc:ifcXML" substitutionGroup="ifc:uos"/>
<xs:complexType name="ifcXML">
<xs:complexContent>
<xs:extension base="ifc:uos">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ifc:Entity"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="IfcActionRequest" type="ifc:IfcActionRequest" substitutionGroup="ifc:IfcControl" nillable="true"/>
<xs:complexType name="IfcActionRequest">
<xs:complexContent>
<xs:extension base="ifc:IfcControl">
<xs:attribute name="PredefinedType" type="ifc:IfcActionRequestTypeEnum" use="optional"/>
<xs:attribute name="Status" type="ifc:IfcLabel" use="optional"/>
<xs:attribute name="LongDescription" type="ifc:IfcText" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="IfcActor" type="ifc:IfcActor" substitutionGroup="ifc:IfcObject" nillable="true"/>
<xs:complexType name="IfcActor">
<xs:complexContent>
<xs:extension base="ifc:IfcObject">
<xs:sequence>
<xs:element name="TheActor">
<xs:complexType>
<xs:group ref="ifc:IfcActorSelect"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="IfcWarpingMomentMeasure-wrapper" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ifc:IfcWarpingMomentMeasure">
<xs:attributeGroup ref="ifc:instanceAttributes"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

Goal

I want to have all the root elements ‘xs:element’ as features:

  1. <xs:element name="uos" type="ifc:uos" abstract="true"/>
  2. <xs:element name="ifcXML" type="ifc:ifcXML" substitutionGroup="ifc:uos"/>
  3. <xs:element name="IfcActionRequest" type="ifc:IfcActionRequest" substitutionGroup="ifc:IfcControl" nillable="true"/>

 

  1. <xs:element name="IfcActor" type="ifc:IfcActor" substitutionGroup="ifc:IfcObject" nillable="true"/>
  2. <xs:element name="IfcWarpingMomentMeasure-wrapper" nillable="true">
    <xs:complexType>
    <xs:simpleContent>
    <xs:extension base="ifc:IfcWarpingMomentMeasure">
    <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
    </xs:simpleContent>
    </xs:complexType>
    </xs:element>

What I did so far

If I use the XMLFragmenter or XMLXQueryExtractor it always gets me additionally the child-elements from xs:complexType etc.

I may have troubles the the XQuery expression.

Can anybody help me out?

 

Cheers,
Maria


FME Form version: 2024.0.1.0 (20240328 - Build 24202 - WIN64)

Best answer by geomancer

Use /*/xs:element as XQuery Expression in XMLXQueryExtractor or XMLXQueryExploder, or as value for Elements to Match in XMLFragmenter. 

 

This post is closed to further activity.
It may be an old question, an answered question, an implemented idea, or a notification-only post.
Please check post dates before relying on any information in a question or answer.
For follow-up or related questions, please post a new question or idea.
If there is a genuine update to be made, please contact us and request that the post is reopened.

2 replies

geomancer
Evangelist
Forum|alt.badge.img+60
  • Evangelist
  • Best Answer
  • April 10, 2024

Use /*/xs:element as XQuery Expression in XMLXQueryExtractor or XMLXQueryExploder, or as value for Elements to Match in XMLFragmenter. 

 


mariaka
Contributor
Forum|alt.badge.img+14
  • Author
  • Contributor
  • April 10, 2024

Thanks @geomancer ! That’s it!