5

一意のIDを持つ特定のノードを選択し、ノード全体をxmlとして返すにはどうすればよいですか。

<xml>
<library>
<book id='1'>
<title>firstTitle</title>
<author>firstAuthor</author>
</book>
<book id='2'>
<title>secondTitle</title>
<author>secondAuthor</author>
</book>
<book id='3'>
<title>thirdTitle</title>
<author>thirdAuthor</author>
</book>
</library>
</xml>

この場合、id = '3'の本を返したいので、次のようになります。

<book id='3'>
<title>thirdTitle</title>
<author>thirdAuthor</author>
</book>
4

5 に答える 5

4

XPathを参照している場合(ドキュメントを変換するのではなく、ドキュメントを検索しているため)、次のようになります。

//book[@id=3]

もちろん、言語によっては、この検索をさらに簡単にするライブラリがあるかもしれません。

于 2012-06-27T05:53:42.527 に答える
4

このXSLT1.0スタイルシート..。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
  <xsl:apply-templates select="*/*/book[@id='3']" />
</xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
   <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

...サンプル入力ドキュメントを指定されたサンプル出力ドキュメントに変換します

于 2012-06-27T06:06:39.937 に答える
3

それを行うための最もパフォーマンスの高い*そして読みやすい方法は、key:を介することです。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- To match your expectation and input (neither had <?xml?> -->
    <xsl:output method="xml" omit-xml-declaration="yes" />

    <!-- Create a lookup for books -->
    <!-- (match could be more specific as well if you want: "/xml/library/book") -->
    <xsl:key name="books" match="book" use="@id" />

    <xsl:template match="/">
        <!-- Lookup by key created above. -->
        <xsl:copy-of select="key('books', 3)" />
        <!-- You can use it anywhere where you would use a "//book[@id='3']" -->
    </xsl:template>

</xsl:stylesheet>

* 2142個のアイテムと121個のルックアップの場合、500ミリ秒の差があり、私の場合は全体で33%高速化されました。に対して測定//book[@id = $id-to-look-up]

于 2016-08-12T22:57:04.867 に答える
0

XSLTではxsl:copy-of、選択したノードセットを出力結果ツリーに挿入するために使用します。

<xsl:copy-of select="/*/library/book[@id=3]"/>
于 2012-06-27T06:03:59.903 に答える
-2

SimpleXMLxpathを見てください

xpath simpleXML

于 2012-06-27T05:51:24.477 に答える