给出以下 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 中可能的解决方案可能是这样的:
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