皆さんはXPathでFizzBuzzが書けることをご存じですか?
ほとんどの方はXPathと聞くとXMLやHTMLから特定の文字列などを取り出すもの、と認識しているはずです。
それも間違いではないのですが、それしかできないと思うのは完全な間違いです。
実はXPathでもプログラミング言語でよく行われる、 FizzBuzzができる のです。
まずはこのXPathコードを見てください。
let $data := 1 to 100
return
for $i in $data
return
if(($i mod 3 = 0) and ($i mod 5 eq 0))
then "fizzbuzz"
else if($i mod 3 = 0) then "fizz"
else if($i mod 5 = 0) then "buzz"
else $i
「え?これがXPath?」と、ほとんどの方は驚くでしょう。
残念なことに、よく知られているXPathはXPath1.0で、これはFizzBuzzはできません。
しかし、実は現時点で最新のXPathは 3.1 です。
そう、XPathにも バージョンがある のです。
上記コードの実行結果はこちらのコンソールから見れます。
それでは、どうやって最新のXPathを実行するか、まずはXHTMLを見てみましょう。
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>XPathでFizzBuzz</title>
<script src="../../components/lib/SaxonJS2.js"></script>
<script src="fizzbuzz.js"></script>
</head>
<body>
<h1>XPathでFizzBuzz</h1>
<p>XPathでFizzBuzzを実行します。開発者パネルのコンソールを見てください。</p>
</body>
</html>
まず、XPath3.1をウェブで実行するにはSaxonJSが必要です。
Saxonicaのウェブサイトからダウンロードします。
次にJavaScriptです。
const xpath = `
let $data := 1 to 100
return
for $i in $data
return
if(($i mod 3 = 0) and ($i mod 5 = 0))
then "fizzbuzz"
else if($i mod 3 = 0) then "fizz"
else if($i mod 5 = 0) then "buzz"
else $i
`;
window.addEventListener("load", function() {
console.log(xpath);
dataset = SaxonJS.XPath.evaluate(xpath, null);
console.log(dataset);
});
先ほどのXPathをただ実行しているだけです。SaxonJS.XPath.evaluate(xpath, null)
がSaxonJSでXPathを実行するための基本となります。
いかがでしたか。
XPathは一般のイメージと違って実質プログラミング言語です。
なので、かなり強力な処理ができます。
ぜひとも、どしどし使っていただきたいと思います。