如何将具有自迭代嵌套复杂元素的xml转换为平面结构

时间:2019-04-13 11:55:42

标签: xslt

我需要将具有多个复杂元素的XML文件转换为平面结构。这是我的大型xml文件的示例结构,需要将其格式化为所需输出中的平面结构。

输入Xml-

    <?xml version="1.0" encoding="UTF-8"?>
<tns:Response xmlns:tns="http://www.example.org/response" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/response response.xsd ">
    <tns:Consumer>
        <tns:ConsumerID>tns:ConsumerID</tns:ConsumerID>
        <tns:Relation>
            <tns:ParentEntity>
                <tns:PEID>PE1</tns:PEID>
                <tns:Customer>
                    <tns:CustID>1</tns:CustID>
                    <tns:Relation>
                        <tns:ParentEntity>
                            <tns:PEID>PE2</tns:PEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ParentEntity>
                        <tns:ChildEntity>
                            <tns:CEID>CE1</tns:CEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ChildEntity>
                    </tns:Relation>
                </tns:Customer>
                <tns:Account>
                    <tns:AccountId>1</tns:AccountId>
                    <tns:Relation>
                        <tns:ParentEntity>
                            <tns:PEID>PE3</tns:PEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ParentEntity>
                        <tns:ChildEntity>
                            <tns:CEID>CE2</tns:CEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ChildEntity>
                    </tns:Relation>
                </tns:Account>
            </tns:ParentEntity>
            <tns:ChildEntity>
                <tns:CEID>CE3</tns:CEID>
                <tns:Customer>
                    <tns:CustID>1</tns:CustID>
                    <tns:Relation>
                        <tns:ParentEntity>
                            <tns:PEID>PE4</tns:PEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ParentEntity>
                        <tns:ChildEntity>
                            <tns:CEID>CE4</tns:CEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ChildEntity>
                    </tns:Relation>
                </tns:Customer>
                <tns:Account>
                    <tns:AccountId>1</tns:AccountId>
                    <tns:Relation>
                        <tns:ParentEntity>
                            <tns:PEID>PE5</tns:PEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ParentEntity>
                        <tns:ChildEntity>
                            <tns:CEID>CE5</tns:CEID>
                            <tns:Customer/>
                            <tns:Account/>
                        </tns:ChildEntity>
                    </tns:Relation>
                </tns:Account>
            </tns:ChildEntity>
        </tns:Relation>
    </tns:Consumer>
</tns:Response>

必需的输出XML-

<?xml version="1.0" encoding="UTF-8"?>
<tns:Response xmlns:tns="http://www.example.org/Required" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/Required Required.xsd ">
    <tns:Consumer>
        <tns:Customer>
            <tns:CustID>tns:CustID</tns:CustID>
        </tns:Customer>
        <tns:Account>
            <tns:AccountId>tns:AccountId</tns:AccountId>
        </tns:Account>
        <tns:Customer>
            <tns:CustID>tns:CustID</tns:CustID>
        </tns:Customer>
        <tns:Account>
            <tns:AccountId>tns:AccountId</tns:AccountId>
        </tns:Account>
        <tns:Customer/>
        <tns:Account/>
        <tns:Customer/>
        <tns:Account/>
    </tns:Consumer>
</tns:Response>

输出xml只需要在平面结构中具有customer和Account复杂元素。如何使用XSLT实现这一目标。任何帮助表示赞赏。 提前致谢。

1 个答案:

答案 0 :(得分:0)

我不确定您所说的“平面地图”是什么意思,因为您的{    "error": "access_denied",    "error_description": "Invalid CSRF Token '5c76e875-1f49-4a29-97f2-beacc6082b0e' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'." } -Customer结构定义了与父母和孩子的关系。这是一个XSLT代码段,用于仅平整XML中提到的所有AccountCustomer。可以调整为仅在每个级别上使用子级。但是我无法通过分析您的预期结果来确切地找到它,因为在XML输入中没有与ID对应的匹配ID:

Account