0

以下の xsl を変更して、値がタグであるパラメーターを処理する方法。w:p と w:pPr/w:pStyle/@w:val を使用する代わりに、それらを引数として渡します

実際の XSl :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"
>
<xsl:param name="styleName"/>
<xsl:output method="text"/>
<xsl:template match="w:p"/>
<xsl:template match="w:p[w:pPr/w:pStyle/@w:val[matches(., concat('^(',$styleName,')$'),'i')]]"> 
    <xsl:value-of select="."/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>

必要な XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">

<xsl:param name="styleName" select="'articletitle'"/>
<xsl:param name="para" select="'//w:p[w:pPr/w:pStyle/@w:val[matches(.,concat('^(',$styleName,')$')]]'"/>

<xsl:output method="text"/>

    <xsl:template match="/">                
         <xsl:for-each select="$para">
                <xsl:value-of select="."/><xsl:text>&#10;</xsl:text>
         </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
4

2 に答える 2

1

注: xslt のバージョンと使用しているプロセッサに関する情報を提供することに慣れる必要があります。この場合、回答は XSLT 2.0 を使用している場合にのみ有効です。

これは完全な答えではありませんが、次のアプローチから始めることができます。

local-name と in-scope-prefixes (XSLT 2.0 でのみ使用可能) を使用して、ノードを動的に一致させてみてください。

空のテンプレートを置き換えるテンプレートの例を次に示します。

<xsl:template match="*[local-name()=substring-after($para,':') and in-scope-prefixes(.)[.=substring-before($para,':')]]"/>

式の 2 番目の部分 ($parastyle) については、動的に評価する独自の関数を作成することしか考えられません。

このような関数の例を後で投稿しようと思います。

于 2012-10-29T18:12:34.190 に答える
0

私は自分のコーディングの問題を突き止めました.2行目にあります.

<xsl:param name="para" select="'//w:p[w:pPr/w:pStyle/@w:val[matches(.,concat('^(',$styleName,')$')]]'"/>

select属性に引用符を付けたので、値はxpath式ではなく文字列と見なされました。

于 2012-10-30T10:11:52.410 に答える