1

次のXML(W3Schoolsから)が与えられます:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

</bookstore>

以下を満たす一連の本を返却する方法はありますか?

  1. (A、B、...)のいずれかが作成者として存在しますか?
  2. (A、B、...)のすべてが作者として存在しますか?
  3. (A、B、...)のいずれかが作成者として存在するべきではありませんか?
  4. (A、B、...)のすべてが著者として一緒に存在するべきではありませんか?

ここで、(A、B、...)は作成者名のセットです。

4

1 に答える 1

1

これがすべての必要な表現です。名前のセットは、文字列のセットとしてだけでなく(XPath 1.0にはそのような概念はありません)、ノードセットとして提供されていると思います。ノードセットの各ノードの文字列値は、必要な名前の1つです。 。

また、XSLT 1.0を使用して、4つのXPath式のそれぞれの評価結果を表示できるようにしています。

著者名のセットとして、「XQueryKickStart」というタイトルの本の著者名を選択しました。

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

 <xsl:variable name="vAuthors" select="/*/*[3]/author"/>

 <xsl:template match="/">
  1. Any of (A, B, ...) exist as authors: <xsl:text/>

  <xsl:value-of select="boolean($vAuthors[. = /*/*/author])"/>

  2. All of (A, B, ...) exist as authors: <xsl:text/>

  <xsl:value-of select="not($vAuthors[not(. = /*/*/author)])"/>

  3. Any of (A, B, ...) should not exist as authors: <xsl:text/>

  <xsl:value-of select="not($vAuthors[. = /*/*/author])"/>

  4. All of (A, B, ...) should not exist as authors together: <xsl:text/>

  <xsl:value-of select=
    "not(/*/*[count(author[. = $vAuthors]) = count($vAuthors)])"/>

 </xsl:template>
</xsl:stylesheet>

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

<bookstore>
    <book category="COOKING">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="CHILDREN">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="WEB">
        <title lang="en">XQuery Kick Start</title>
        <author>James McGovern</author>
        <author>Per Bothner</author>
        <author>Kurt Cagle</author>
        <author>James Linn</author>
        <author>Vaidyanathan Nagarajan</author>
        <year>2003</year>
        <price>49.99</price>
    </book>
    <book category="WEB">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

XPath式が評価され、その結果が出力にコピーされます。

  1. Any of (A, B, ...) exist as authors: true

  2. All of (A, B, ...) exist as authors: true

  3. Any of (A, B, ...) should not exist as authors: false

  4. All of (A, B, ...) should not exist as authors together: false
于 2013-03-27T04:33:37.327 に答える