중첩 된 요소가있는 새 구조에서 Excel에서 내 보낸 XML 구조를 변환하려고합니다. XSLT v1.0을 사용하는 방법을 알아내는 것이 너무 까다 롭습니다.Excel을 XSLT 1.0을 사용하여 중첩 요소가있는 XML로 변환하는 방법?
내 목표는 결과 데이터의 원하는 lavel에 행 데이터를 넣는 것입니다. 행 2 개 데이터 셀을 가지고
<projects>
<category name="001">
...
</category>
</projects>
경우는 영역을 나타내고 previos 카테고리의 하위 같아야 그래서 행 데이터 만 1 셀을 포함하는 경우, 그것은, 예를 들어 카테고리이다.
<projects>
<category name="001">
<region name="AAA">...</region>
<region name="BBB">...</region>
</category>
</projects>
행에 3 또는 4 개의 셀이있는 데이터는 해당 계정을 나타내며 이전 지역의 하위 여야합니다. 내가 지금까지 무엇을 좋아
<projects>
<category name="001">
<region name="AAA">
<account name="lorem">...</account>
<account name="ipsum">...</account>
</region>
<region name="BBB">...</region>
...
</category>
</projects>
: 다음은 엑셀에서 XML 파일입니다. 반복되는 행 요소가있는 간단한 구조입니다. 각 행에는 5 개의 셀이 있지만 모든 셀에는 항상 데이터 요소가 포함되지는 않습니다. 이 정보를 사용하여 각 행이 어떤 종류의 정보를 나타내는 지 확인했습니다.
<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="69" x:FullColumns="1" x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="69">
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"/>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s68"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="15">
<Cell ss:Index="2" ss:StyleID="s70"><Data ss:Type="String">Categorie 004</Data></Cell>
<Cell ss:StyleID="s71"/>
<Cell ss:StyleID="s70"/>
<Cell ss:StyleID="s72"/>
<Cell ss:StyleID="s70"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">AAA</Data></Cell>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s69"><Data ss:Type="String">X</Data></Cell>
<Cell ss:StyleID="s73"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.01</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"/>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s73"/>
<Cell ss:StyleID="s68"/>
</Row>
<Row ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"/>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s73"/>
<Cell ss:StyleID="s68"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"/>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s73"/>
<Cell ss:StyleID="s68"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="15">
<Cell ss:Index="2" ss:StyleID="s70"><Data ss:Type="String">Categorie 001</Data></Cell>
<Cell ss:StyleID="s71"/>
<Cell ss:StyleID="s70"/>
<Cell ss:StyleID="s72"/>
<Cell ss:StyleID="s70"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s82"><Data ss:Type="String">AAA</Data></Cell>
<Cell ss:StyleID="s83"/>
<Cell ss:StyleID="s82"/>
<Cell ss:StyleID="s84"/>
<Cell ss:StyleID="s85"><Data ss:Type="Number">3.0800000000000001E-2</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">dolor</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">123</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">A</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.01</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="15">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">sit amet</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">445</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">B</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.03</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">consetetur</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">36</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">B</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">8.0000000000000004E-4</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s82"><Data ss:Type="String">BBB</Data></Cell>
<Cell ss:StyleID="s83"/>
<Cell ss:StyleID="s82"/>
<Cell ss:StyleID="s84"/>
<Cell ss:StyleID="s85"><Data ss:Type="Number">0.03</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">sadipscing</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">666</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">A</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.01</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="15">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">elitr</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">97</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">C</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.02</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="15">
<Cell ss:Index="2" ss:StyleID="s68"/>
<Cell ss:StyleID="s69"/>
<Cell ss:StyleID="s68"/>
<Cell ss:StyleID="s73"/>
<Cell ss:StyleID="s68"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s70"><Data ss:Type="String">Categorie 001</Data></Cell>
<Cell ss:StyleID="s71"/>
<Cell ss:StyleID="s70"/>
<Cell ss:StyleID="s72"/>
<Cell ss:StyleID="s70"/>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s82"><Data ss:Type="String">AAA</Data></Cell>
<Cell ss:StyleID="s83"/>
<Cell ss:StyleID="s82"/>
<Cell ss:StyleID="s84"/>
<Cell ss:StyleID="s85"><Data ss:Type="Number">0.04</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">aliquyam</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">65</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">A</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.02</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">ipsum</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">99</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">B</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.02</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s82"><Data ss:Type="String">BBB</Data></Cell>
<Cell ss:StyleID="s83"/>
<Cell ss:StyleID="s82"/>
<Cell ss:StyleID="s84"/>
<Cell ss:StyleID="s85"><Data ss:Type="Number">0.01</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="14.25">
<Cell ss:Index="2" ss:StyleID="s68"><Data ss:Type="String">lorem</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="Number">321</Data></Cell>
<Cell ss:StyleID="s69"><Data ss:Type="String">C</Data></Cell>
<Cell ss:StyleID="s86"/>
<Cell ss:StyleID="s74"><Data ss:Type="Number">0.01</Data></Cell>
</Row>
</Table>
지금까지 필자는 다음 스타일 시트를 만들고 필요에 따라 모든 정보를 필터링 할 수 있습니다.
내 결과
<!-- Filter Excel Cells -->
<xsl:template match="ss:Row">
<xsl:if test="count(.//ss:Data) > 0">
<xsl:choose>
<xsl:when test="count(.//ss:Data)=1">
<Categorie>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Categorie>
</xsl:when>
<xsl:when test="count(.//ss:Data)=2">
<Region>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Region>
</xsl:when>
<xsl:when test="count(.//ss:Data)=3">
<xsl:choose>
<xsl:when test=".//ss:Cell[5]/ss:Data='Rating'">
<Header>
<Text1>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Text1>
<Text2>
<xsl:value-of select=".//ss:Cell[3]/ss:Data"/>
</Text2>
<Text3>
<xsl:value-of select=".//ss:Cell[5]/ss:Data"/>
</Text3>
</Header>
</xsl:when>
<xsl:otherwise>
<Account>
<Name>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Name>
<Value>
<xsl:value-of select=".//ss:Cell[3]/ss:Data"/>
</Value>
<Rating>
<xsl:value-of select=".//ss:Cell[5]/ss:Data"/>
</Rating>
</Account>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="count(.//ss:Data)=4">
<xsl:choose>
<xsl:when test=".//ss:Cell[5]/ss:Data='Gewicht'">
<Header>
<Text1>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Text1>
<Text2>
<xsl:value-of select=".//ss:Cell[2]/ss:Data"/>
</Text2>
<Text3>
<xsl:value-of select=".//ss:Cell[3]/ss:Data"/>
</Text3>
<Text4>
<xsl:value-of select=".//ss:Cell[5]/ss:Data"/>
</Text4>
</Header>
</xsl:when>
<xsl:otherwise>
<Account>
<Name>
<xsl:value-of select=".//ss:Cell[1]/ss:Data"/>
</Name>
<Type>
<xsl:value-of select=".//ss:Cell[2]/ss:Data"/>
</Type>
<Value>
<xsl:value-of select=".//ss:Cell[3]/ss:Data"/>
</Value>
<Rating>
<xsl:value-of select=".//ss:Cell[5]/ss:Data"/>
</Rating>
</Account>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:template>
이제이 방법을 찾습니다
<?xml version="1.0" encoding="UTF-8"?>
<Projects xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Categorie>Categorie 004</Categorie>
<Region>AAA</Region>
<Account>
<Name>AAA</Name>
<Value>X</Value>
<Rating>0.01</Rating>
</Account>
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
<Categorie>Categorie 001</Categorie>
<Region>AAA</Region>
<Account>
<Name>dolor</Name>
<Type>123</Type>
<Value>A</Value>
<Rating>0.01</Rating>
</Account>
<Account>
<Name>sit amet</Name>
<Type>445</Type>
<Value>B</Value>
<Rating>0.03</Rating>
</Account>
<Account>
<Name>consetetur</Name>
<Type>36</Type>
<Value>B</Value>
<Rating>8.0000000000000004E-4</Rating>
</Account>
<Region>BBB</Region>
<Account>
<Name>sadipscing</Name>
<Type>666</Type>
<Value>A</Value>
<Rating>0.01</Rating>
</Account>
<Account>
<Name>elitr</Name>
<Type>97</Type>
<Value>C</Value>
<Rating>0.02</Rating>
</Account>
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
<Categorie>Categorie 001</Categorie>
<Region>AAA</Region>
<Account>
<Name>aliquyam</Name>
<Type>65</Type>
<Value>A</Value>
<Rating>0.02</Rating>
</Account>
<Account>
<Name>ipsum</Name>
<Type>99</Type>
<Value>B</Value>
<Rating>0.02</Rating>
</Account>
<Region>BBB</Region>
<Account>
<Name>lorem</Name>
<Type>321</Type>
<Value>C</Value>
<Rating>0.01</Rating>
</Account>
</Projects>
나쁜 (나를 위해),하지만 난 할 데이터가 필요 중첩 된 이 방법은 동일한 수준의 모든 데이터가 아닙니다. 당신의 도움이 필요합니다!
<?xml version="1.0" encoding="UTF-8"?>
<Projects xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Categorie name="001"/>
<Region name="AAA">
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
</Region>
<Region name="BBB">
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
<Account>
<Name>Name</Name>
<Type>Value</Type>
<Value>Type</Value>
<Rating>Rating</Rating>
</Account>
...
</Region>
<Categorie name="002"/>
<Region name="AAA">
...
</Region>
</Categorie>
</Projects>