.ods
ファイルの/content.xml
にあるセルの値をXSLT 2.0トランスフォームを使用して取得したいとします。ブランクセルにかかわらず、たとえば列D
の値を取得する必要があります。XSLT 2.0経由で.ODSファイルからセルブロックの値を読み取る方法
これは反復処理を行う列になります。
他のすべての列についても同じことと私はXML出力に異なるノードに入れたいです。
たとえば、このcontent.xml
ファイル:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<office:document-content
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:msoxl="http://schemas.microsoft.com/office/excel/formula">
<office:font-face-decls>
<style:font-face style:name="Calibri" svg:font-family="Calibri"/>
</office:font-face-decls>
<office:automatic-styles>
<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/>
<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="1.69333333333333cm"/>
</style:style>
<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties style:row-height="15pt" style:use-optimal-row-height="true" fo:break-before="auto"/>
</style:style>
<style:style style:name="ta1" style:family="table" style:master-page-name="mp1">
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
</style:style>
</office:automatic-styles>
<office:body>
<office:spreadsheet>
<table:calculation-settings table:case-sensitive="false" table:search-criteria-must-apply-to-whole-cell="false"/>
<table:table table:name="Folha1" table:style-name="ta1">
<table:table-column table:style-name="co1" table:number-columns-repeated="16384" table:default-cell-style-name="ce1"/>
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item1</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2" table:style-name="ce1"/>
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item3</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16380" table:style-name="ce1"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item2</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16383" table:style-name="ce1"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="3" table:style-name="ce1"/>
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item4</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3" table:style-name="ce1"/>
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item5</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16376"/>
</table:table-row>
<table:table-row table:number-rows-repeated="5" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="7" table:style-name="ce1"/>
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item5</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16376"/>
</table:table-row>
<table:table-row table:number-rows-repeated="3" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="7" table:style-name="ce1"/>
<table:table-cell office:value-type="string" table:style-name="ce1">
<text:p>item6</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16376"/>
</table:table-row>
<table:table-row table:number-rows-repeated="1048561" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
</table:table>
<table:table table:name="Folha2" table:style-name="ta1">
<table:table-column table:style-name="co1" table:number-columns-repeated="16384" table:default-cell-style-name="ce1"/>
<table:table-row table:number-rows-repeated="1048576" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
</table:table>
<table:table table:name="Folha3" table:style-name="ta1">
<table:table-column table:style-name="co1" table:number-columns-repeated="16384" table:default-cell-style-name="ce1"/>
<table:table-row table:number-rows-repeated="1048576" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
</table:table>
</office:spreadsheet>
</office:body>
</office:document-content>
<?xml version="1.0" encoding="UTF-8"?>
基本XSLT例:
<xsl:template match="office:document-content/office:body/office:spreadsheet//table:table[@table:name='Folha1']">
<xsl:variable name="description" select="table:table-row/table:table-cell[4]/text:p"/>
<!--xsl:if test="$description != '.'"-->
<Description>
<xsl:value-of select="$description"/>
</Description>
</xsl:template>
この例の出力は大丈夫、私に "item5" を与えるが、実際にIこの背後にある論理を知りません - どのようにカウントしているかなど
私がXSLTで知っている限り、空のセルは実際には数えられません!
私はそうですか?
しかし、何らかの形で、.ods
ファイルは、これらの空のセルとドキュメントの構造を保存して、次回にファイルを開くときにそれを取り出せるようにします。
どのようにですか?
私が知りたいことは:
これらの「空の」セルを数えてアイテムを実際に選択し、シート内の各アイテムの特定の場所を見つけるにはどうすればよいですか。
所望の出力は次のように次のようになります。私はこの問題の解決のための私のコードを拡張し
<group1>
<Description>item</Description>
<Description>item2</Description>
<group4>
<Description>item3</Description>
<Description>item4</Description>
<group8>
<Description>item5</Description>
<Description>item6</Description>
<Description>item7</Description>
はいありがとうございますが、何のthats私は尋ねていますか? XSLTで空のセルを数える方法を教えてください。解決策は何でしょうか? – Sojimanatsu
すべての 'table:table-row/table:table-cell [4]/text:p'に対応する値が出力に出力されます。 'table:table-cell [4]'の中には、子として 'text:p'を持たないものもあるので、空白が出力に現れ、子ノードがあれば対応する値が現れます。 'item5' –
XSLTはすでに空のセルをカウントしており、無視していません。あなたの入力ファイルは行単位のデータ、すなわちA1、B1、C1などの値を持ちますが、望ましい出力は列単位、つまりA1、A2などです。したがって、この変換を実行するのに十分なインテリジェントなXSLTを作成する必要があります。 –