我剛開始玩XLS轉換 - 我想用它們來在我的項目中添加額外的抽象層。 我想使用轉換將由水晶報告生成的xml文件轉換爲另一個xml,爲我的項目簡化(所以將來,當文件模式將改變時,我只需要更改我的xsl文件)。XLS轉換,請求子節點數據
所以我的XML輸入文件看起來像這樣:
<CrystalReport xmlns="urn:crystal-reports:schemas:report-detail"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:crystal-reports:schemas:report-detail http://www.businessobjects.com/products/xml/CR2008Schema.xsd">
<Group Level="1">
<GroupHeader>
<Section SectionNumber="0">
<Field Name="Field4" FieldName="{@PartIndex}"><FormattedValue>Part Number</FormattedValue><Value>51-01672</Value></Field>
</Section>
<Section SectionNumber="1">
<Text Name="Text28"><TextValue>Part Description</TextValue>
</Text>
</Section>
<Section SectionNumber="2">
<Text Name="Text21"><TextValue>Part Description 2</TextValue>
</Text>
</Section>
<Section SectionNumber="3">
</Section>
...
這只是其中的一部分。我應該提到的是GroupHeader節點不會在組節點內重複。
所以我做了一些早期的XSL定義(測試緣故):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="urn:crystal-reports:schemas:report-detail"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:crystal-reports:schemas:report-detail http://www.businessobjects.com/products/xml/CR2008Schema.xsd">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/t:CrystalReport">
<ToolsUsage>
<xsl:value-of select="t:Group[1]/@Level"/>
</ToolsUsage>
</xsl:template>
</xsl:stylesheet>
我用Python的lxml的LIB進行測試。 此,如下面的代碼預期收益:
<ToolsUsage xmlns:t="urn:crystal-reports:schemas:report-detail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</ToolsUsage>
到目前爲止,一切都很好(級別屬性等於「1」爲第一組節點)。但我無法進一步發展。 就好了,我試圖讓現場節點的值內文本(第一部分occurence的):
<xsl:value-of select="t:Group[1]/GroupHeader/Section[1]/Field/Value"/>
但我不是(作爲結果節點)得到任何東西。我試圖得到一個SectionNumber屬性,也沒有結果。我甚至使用xml路徑工具來提取精確的xpath查詢,但似乎查詢是正確的。我相信這是非常基本的東西,但沒有找到什麼。
真的那麼容易,謝謝! –