40392


以下のような xsl の場合，最初に見つかった要素のみを処理したい場合に  
XPath はどのような式になりますでしょうか？

例えば xsl:copy-of select="$v//p/@*" とすると，配下すべての p
要素の属性がコピーされてしまいます。最初の要素のみを処理したいのです。

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" 
    version="2.0">
    
    <xsl:variable name="v">
        <a>
            <p att1="a" att2="b" >
                <p att3="c"> 
                    <p >
                    </p>
                </p>
            </p>
        </a>
    </xsl:variable>
    
    <xsl:template match="/">
        <p>
            <xsl:copy-of select="????"/>
        </p>
    </xsl:template>
    
    </xsl:stylesheet>
    
[/code]

期待する結果

[code]

    <?xml version="1.0" encoding="UTF-8"?><p att1="a" att2="b" />
    
[/code]

宜しくお願い致します。


CC BY-SA 3.0
2017-12-19T10:22:44.353
40382
2017-12-19T15:22:41.030
25399
question
xpath xsl xslt
XPath 最初に見つかったノードのみを処理する


`$v/descendant::p[1]/@*`。

`$v//p[1]` だと意味が異なるので、`$v/descendant::p[1]` にします。

例示だと `$v` は document node ですが、もし `$v` が `as="element()"`
になることがあるのなら、`$v/descendant-or-self::p[1]` がお求めのものになるかもしれません。


CC BY-SA 3.0
2017-12-19T15:03:24.203
40392
2017-12-19T15:22:41.030
2017-12-19T15:22:41.030
26271
26271
40382
answer