XSLT20 のバックアップソース(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- XSLT20 へ行く。
- 1 (2016-03-24 (木) 16:35:29)
- 2 (2016-03-28 (月) 17:46:51)
- 3 (2016-04-15 (金) 15:54:16)
- 4 (2016-05-09 (月) 15:49:54)
- 5 (2016-05-11 (水) 18:29:54)
- 6 (2016-05-16 (月) 17:02:14)
- 7 (2016-05-17 (火) 15:03:21)
- 8 (2016-05-23 (月) 15:20:18)
- 9 (2016-05-24 (火) 16:07:13)
- 10 (2016-05-24 (火) 19:20:06)
- 11 (2016-05-25 (水) 15:56:42)
- 12 (2016-06-07 (火) 18:12:55)
- 13 (2016-07-28 (木) 14:11:20)
- 14 (2016-07-29 (金) 13:01:28)
- 15 (2016-08-01 (月) 13:51:06)
- 16 (2016-08-04 (木) 14:20:25)
- 17 (2016-08-12 (金) 14:27:43)
- 18 (2016-08-12 (金) 15:35:29)
- 19 (2017-10-13 (金) 15:46:37)
- 20 (2017-12-07 (木) 18:13:41)
- 21 (2017-12-15 (金) 14:21:36)
- 22 (2018-10-02 (火) 13:51:51)
--- title: XSL Transformations (XSLT) Version 2.0 description: XSL Transformations (XSLT) Version 2.0 に関するメモ書き author: aterai pubdate: 2016-03-24 --- * XSL Transformations (XSLT) Version 2.0 [#bda0353a] - [https://www.w3.org/TR/xslt20/ XSL Transformations (XSLT) Version 2.0] ** fn:doc-avalable() [#x03c1df3] #code{{ @echo off setlocal set SRC=C:/tmp/aaa/word/document.xml set DST=C:/output/aaa/xxx.xml set LIB=C:/lib/saxon-9.1.0.8.jar set SAXON=net.sf.saxon.Transform set XSLT=C:/xslt/docx2xxx.xsl "%JAVA_HOME%\bin\java" -cp "%LIB%" %SAXON% -s:"%SRC%" -xsl:"%XSLT%" -o:"%DST%" }} #code{{ <!-- C:/tmp/aaa/word/numbering.xml が存在するかをチェックしたい --> <xsl:if test="fn:doc-available(fn:replace(fn:base-uri(),'document\.xml$','numbering.xml'))"> <xsl:variable name="numbering" select="fn:document('numbering.xml',/)/w:numbering" /> </xsl:if> }} - `fn:document('numbering.xml',/)`のように第二引数を指定して入力ファイル相対パスで`fn:doc-available`を使用することは出来ない - `fn:base-uri()` -> `C:/tmp/aaa/word/document.xml` - `fn:resolve-uri('')` -> `C:/xslt/docx2xxx.xsl` ** xsl:analyze-string [#ic1c9eb9] `docx`の`w:lvlText`のフォーマット(例えば`%1.%2.%3`)に従って、実際の段落番号文字列に変換する場合、`xsl:analyze-string`が便利。 - [https://msdn.microsoft.com/ja-jp/library/office/ee922775(v=office.14).aspx Open XML WordprocessingML の段落番号を操作する] #code{{ <!-- w:lvlRestartの処理などは省略 --> <xsl:variable name="numberText"> <xsl:analyze-string select="$lvl/w:lvlText/@w:val" regex="%\d"> <xsl:matching-substring> <xsl:variable name="pos" select="number(replace(.,'%',''))" /> <xsl:variable name="i" select="$pos - 1" /> <xsl:variable name="ii" select="$i - 1" /> <xsl:variable name="parentList" select="$list[(w:pPr/w:numPr/w:ilvl and w:pPr/w:numPr/w:ilvl/@w:val=$ii) or ($ii=0 and not(w:pPr/w:numPr/w:ilvl))]" /> <xsl:variable name="pstl" select="if(empty($parentList)) then '' else $parentList[1]/w:pPr/w:pStyle/@w:val" /> <xsl:variable name="next" select="if(empty($psList) or empty($pstl)) then () else index-of($psList,$pstl)" /> <xsl:variable name="list2" select="if(empty($next)) then $list else subsequence($list,$next[last()])" /> <xsl:value-of select="fn:count($list2[(w:pPr/w:numPr/w:ilvl and w:pPr/w:numPr/w:ilvl/@w:val=$i) or ($i=0 and w:pPr/w:numPr and not(w:pPr/w:numPr/w:ilvl))])" /> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="." /> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:variable> }} ** to演算子 [#y5a69778] ** xsl:for-each-group [#sbfd6336] * コメント [#l049a3fc] #comment #comment