17

私は XSLT にかなり慣れていません。これが私の XML です。

<projects>
    <project>
        <number>1</number>
        <title>Project X</title>
    </project>
    <project>
        <number>2</number>
        <title>Project Y</title>
    </project>
    <project>
        <number>3</number>
        <title>Project Z</title>
    </project>
</projects>

1 つのプロジェクトがあり、それに続く兄弟を取得したい場合、どのようにすればよいですか?

このコードは私にはうまくいかないようです:

/projects[title="Project X"]/following-sibling
4

1 に答える 1

31

これは実際には完全にXPathの質問です。

使用

/*/project[title = 'Project X']/following-sibling::project[1]

これにより、XMLドキュメントの最上位要素の子である要素の最初の後続の兄弟が選択ProjectProjectれ、その子の少なくとも1つの文字列値はtitle文字列"Project X"です。

XSLTベースの検証:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
      "/*/project[title = 'Project X']/following-sibling::project[1]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合:

<projects>
    <project>
        <number>1</number>
        <title>Project X</title>
    </project>
    <project>
        <number>2</number>
        <title>Project Y</title>
    </project>
    <project>
        <number>3</number>
        <title>Project Z</title>
    </project>
</projects>

XPath式が評価され、正しく選択された要素が出力にコピーされます。

<project>
   <number>2</number>
   <title>Project Y</title>
</project>
于 2012-04-20T12:40:46.947 に答える