如何返回 XML 节点的完整层次结构?

问题描述 投票:0回答:1

给出以下 XML 片段:

<Profile>
    <Settings>
        <PresentationParameters>
            <Annualize>True</Annualize>
            <LoadExAnteRiskForPresentation>False</LoadExAnteRiskForPresentation>
            <MultiLegDisplayMode>Legs</MultiLegDisplayMode>
            <Parameters>
                <InitialDisplayMode>CollapseToPositions</InitialDisplayMode>
                <InitialExpandCollapseLevel>-1</InitialExpandCollapseLevel>
            </Parameters>
            <PivotExpandCollapseStrategy>ExpandAllStrategy</PivotExpandCollapseStrategy>
            <RollupExternallyManagedSleeves>False</RollupExternallyManagedSleeves>
            <SharedParameters>
                <AssetBasisInEffect>
                    <CalculationType>Invalid</CalculationType>
                    <IsColumnBasisInvested>False</IsColumnBasisInvested>
                    <Type>Standard</Type>
                    <Value>MWB_SESSION</Value>
                </AssetBasisInEffect>
                <AssetBasisSaveable>
                    <CalculationType>Invalid</CalculationType>
                    <IsColumnBasisInvested>False</IsColumnBasisInvested>
                    <Type>Standard</Type>
                    <Value>MWB_SESSION</Value>
                </AssetBasisSaveable>
                <CurrencySaveable>
                    <Mode>GROUP</Mode>
                </CurrencySaveable>
                <IsSessionBasisInEffect>True</IsSessionBasisInEffect>
            </SharedParameters>
            <ShowPositionsGrandTotal>True</ShowPositionsGrandTotal>
            <TargetingCurrency>
                <Mode>GROUP</Mode>
            </TargetingCurrency>
            <TransposeColumns>False</TransposeColumns>
            <UnitBasisMeasureOption>PercentagePoints</UnitBasisMeasureOption>
            <UnitTrustConstituentMode>DoNotDisplay</UnitTrustConstituentMode>
            <WeightProrationOption>Default</WeightProrationOption>
        </PresentationParameters>
    </Settings>
</Profile>

我想返回一个显示每个叶节点的完整路径及其值的结果 - 如下所示:

Settings.PresentationParameters.Annualize  TRUE
Settings.PresentationParameters.LoadExAnteRiskForPresentation  FALSE
Settings.PresentationParameters.MultiLegDisplayMode Legs
Settings.PresentationParameters.Parameters.InitialDisplayMode  CollapseToPositions
...

寻求有关如何检索节点的整个路径的建议。

python xml xpath
1个回答
0
投票

我希望我正确理解了这个问题。 python 中可能的解决方案可能是这样的:

import xml.etree.ElementTree as ET

def dfs(node, path):
    if len(node) == 0:  # Se il nodo è una foglia
        print(f'{path}.{node.tag} {node.text}')
    else:
        for child in node:
            dfs(child, f'{path}.{node.tag}')

xml_string = """<Profile>
    <Settings>
        <PresentationParameters>
            <Annualize>True</Annualize>
            <LoadExAnteRiskForPresentation>False</LoadExAnteRiskForPresentation>
            <MultiLegDisplayMode>Legs</MultiLegDisplayMode>
            <Parameters>
                <InitialDisplayMode>CollapseToPositions</InitialDisplayMode>
                <InitialExpandCollapseLevel>-1</InitialExpandCollapseLevel>
            </Parameters>
            <PivotExpandCollapseStrategy>ExpandAllStrategy</PivotExpandCollapseStrategy>
            <RollupExternallyManagedSleeves>False</RollupExternallyManagedSleeves>
            <SharedParameters>
                <AssetBasisInEffect>
                    <CalculationType>Invalid</CalculationType>
                    <IsColumnBasisInvested>False</IsColumnBasisInvested>
                    <Type>Standard</Type>
                    <Value>MWB_SESSION</Value>
                </AssetBasisInEffect>
                <AssetBasisSaveable>
                    <CalculationType>Invalid</CalculationType>
                    <IsColumnBasisInvested>False</IsColumnBasisInvested>
                    <Type>Standard</Type>
                    <Value>MWB_SESSION</Value>
                </AssetBasisSaveable>
                <CurrencySaveable>
                    <Mode>GROUP</Mode>
                </CurrencySaveable>
                <IsSessionBasisInEffect>True</IsSessionBasisInEffect>
            </SharedParameters>
            <ShowPositionsGrandTotal>True</ShowPositionsGrandTotal>
            <TargetingCurrency>
                <Mode>GROUP</Mode>
            </TargetingCurrency>
            <TransposeColumns>False</TransposeColumns>
            <UnitBasisMeasureOption>PercentagePoints</UnitBasisMeasureOption>
            <UnitTrustConstituentMode>DoNotDisplay</UnitTrustConstituentMode>
            <WeightProrationOption>Default</WeightProrationOption>
        </PresentationParameters>
    </Settings>
</Profile>
"""
root = ET.fromstring(xml_string)
dfs(root, '')

它返回以下输出:

.Profile.Settings.PresentationParameters.Annualize True
.Profile.Settings.PresentationParameters.LoadExAnteRiskForPresentation False
.Profile.Settings.PresentationParameters.MultiLegDisplayMode Legs
.Profile.Settings.PresentationParameters.Parameters.InitialDisplayMode CollapseToPositions
.Profile.Settings.PresentationParameters.Parameters.InitialExpandCollapseLevel -1
.Profile.Settings.PresentationParameters.PivotExpandCollapseStrategy ExpandAllStrategy
.Profile.Settings.PresentationParameters.RollupExternallyManagedSleeves False
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisInEffect.CalculationType Invalid
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisInEffect.IsColumnBasisInvested False
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisInEffect.Type Standard
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisInEffect.Value MWB_SESSION
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisSaveable.CalculationType Invalid
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisSaveable.IsColumnBasisInvested False
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisSaveable.Type Standard
.Profile.Settings.PresentationParameters.SharedParameters.AssetBasisSaveable.Value MWB_SESSION
.Profile.Settings.PresentationParameters.SharedParameters.CurrencySaveable.Mode GROUP
.Profile.Settings.PresentationParameters.SharedParameters.IsSessionBasisInEffect True
.Profile.Settings.PresentationParameters.ShowPositionsGrandTotal True
.Profile.Settings.PresentationParameters.TargetingCurrency.Mode GROUP
.Profile.Settings.PresentationParameters.TransposeColumns False
.Profile.Settings.PresentationParameters.UnitBasisMeasureOption PercentagePoints
.Profile.Settings.PresentationParameters.UnitTrustConstituentMode DoNotDisplay
.Profile.Settings.PresentationParameters.WeightProrationOption Default
© www.soinside.com 2019 - 2024. All rights reserved.