回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>使用Python或XSLT,我想知道如何将高度复杂的分层嵌套XML文件转换为CSV,包括所有子元素,而无需硬编码,尽可能少的元素节点,或者是否合理/有效</p>
<p>请查看附件中的简化XML示例和输出CSV,以便更好地了解我要实现的目标</p>
<p>实际的XML文件包含更多的元素,但数据层次结构和嵌套与示例中类似<code><InvoiceRow></code>元素及其子元素是XML文件中唯一的重复元素,所有其他元素都是静态的,在输出CSV中重复的次数与XML文件中的<code><InvoiceRow></code>元素相同</p>
<p>是重复的<code><InvoiceRow></code>元素给我带来了麻烦。不重复的元素很容易转换为CSV,而无需硬编码任何元素</p>
<p>复杂的XML场景,分层数据结构和多个一对多关系都存储在单个XML文件中。结构化文本文件</p>
<p>XML输入示例:</p>
<pre><code><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Invoice>
<SellerDetails>
<Identifier>1234-1</Identifier>
<SellerAddress>
<SellerStreet>Street1</SellerStreet>
<SellerTown>Town1</SellerTown>
</SellerAddress>
</SellerDetails>
<BuyerDetails>
<BuyerIdentifier>1234-2</BuyerIdentifier>
<BuyerAddress>
<BuyerStreet>Street2</BuyerStreet>
<BuyerTown>Town2</BuyerTown>
</BuyerAddress>
</BuyerDetails>
<BuyerNumber>001234</BuyerNumber>
<InvoiceDetails>
<InvoiceNumber>0001</InvoiceNumber>
</InvoiceDetails>
<InvoiceRow>
<ArticleName>Article1</ArticleName>
<RowText>Product Text1</RowText>
<RowText>Product Text2</RowText>
<RowAmount AmountCurrencyIdentifier="EUR">10.00</RowAmount>
</InvoiceRow>
<InvoiceRow>
<ArticleName>Article2</ArticleName>
<RowText>Product Text11</RowText>
<RowText>Product Text22</RowText>
<RowAmount AmountCurrencyIdentifier="EUR">20.00</RowAmount>
</InvoiceRow>
<InvoiceRow>
<ArticleName>Article3</ArticleName>
<RowText>Product Text111</RowText>
<RowText>Product Text222</RowText>
<RowAmount AmountCurrencyIdentifier="EUR">30.00</RowAmount>
</InvoiceRow>
<EpiDetails>
<EpiPartyDetails>
<EpiBfiPartyDetails>
<EpiBfiIdentifier IdentificationSchemeName="BIC">XXXXX</EpiBfiIdentifier>
</EpiBfiPartyDetails>
</EpiPartyDetails>
</EpiDetails>
<InvoiceUrlText>Some text</InvoiceUrlText>
</Invoice>
</code></pre>
<p><br/>
CSV输出示例:</p>
<pre><code>Identifier,SellerStreet,SellerTown,BuyerIdentifier,BuyerStreet,BuyerTown,BuyerNumber,InvoiceNumber,ArticleName,RowText,RowText,RowAmount,EpiBfiIdentifier,InvoiceUrlText
1234-1,Street1,Town1,1234-2,Street2,Town2,1234,1,Article1,Product Text1,Product Text2,10,XXXXX,Some text
1234-1,Street1,Town1,1234-2,Street2,Town2,1234,1,Article2,Product Text11,Product Text22,20,XXXXX,Some text
1234-1,Street1,Town1,1234-2,Street2,Town2,1234,1,Article3,Product Text111,Product Text222,30,XXXXX,Some text
</code></pre>