BLOGTIMES
» ArchiveList (Tag for "xml" )
«Prev || 1 · 2 · | Next»
2022/12/08

XPath のデバッグに便利な「XPather」

xml  programming 
XPather - XPath のデバッグに便利な「XPather」

XPath を書くときに、結果をリアルタイムに確認できるサービスがあったら便利なんだけどな・・・と思って探してみたら、XPatherというぴったりなサービスを見つけました。

画面の上部に XPath を、左側に XML を入力するとヒットする部分が黄色でハイライトされます。
以前、エントリに書いた RegExr の XPath バージョンという感じですね。


    at 22:59 |
    2022/12/02

    薬が切れたので 5 日ぶりの外出(療養 6 日目)

    covid19  自宅療養  mhlw  tokyo  xml  html 
    桔梗湯, ロキソ - 薬が切れたので 5 日ぶりの外出(療養 6 日目)

    療養 6 日目になりました。

    陽性診断時に処方してもらったトラネキサム酸が切れてしまったものの、相変わらず喉に違和感があるのでクリニックに電話して相談したところ「トラネキサム酸が切れてしまっているようなので漢方出しておきます。処方箋を書いて薬局に届けておくので、直接取りに行ってください。」とのこと。療養期間中は公費負担になるそうで、クリニックや薬局での支払いは必要ありませんでした。

    というわけで、久しぶりに部屋から外に出て、ついでに溜まっていた郵便受けも綺麗にしてきました。

    漢方なので「食間」・・・

    処方された鎮痛剤のロキソは毎食後ですが、桔梗湯の方はよく見ると毎食間の指定です。
    つまり空腹時に飲めということですよね。漢方にはこういうの多くて面倒ですが、仕方ありません。

    ツムラ漢方桔梗湯エキス顆粒 | 製品情報 | LIFE with KAMPO | ツムラ

    のどの炎症を抑え、はれや痛みを改善する漢方薬です。かぜに伴いのどが痛い時や、のどの使い過ぎや乾燥など、のどに炎症がある方におすすめです。のどがはれて痛む扁桃炎にも使われます。口に少しずつ含み、ゆっくりと服用するとよいでしょう

    意外なところで生きた SGML を発見!!

    療養中でやることがないので、検査キットや処方された医薬品の添付文書を詳しく読んでみたりしているのですが、PMDA( (独)医薬品医療機器総合機構)の添付文書ページの左下に SGM と DTD というリンクがあることに気づきました。

    これって HTML や XML の基になった SGMLですよね。

    SGML はOSI基本参照モデルのように教科書の中だけの存在だと思っていましたが、実際にいまでもちゃんと使われ続けている例があったことに素直に驚きました。
    実際に .sgmファイルをダウンロードして確認してみると、紛う事なき SGML です。ENCODING shift-jisというのが、なかなか時代を感じさせます。

    いつ頃これが策定されたのか気になったので、参照されている DTD を調べてみると Version 1.0, April 9, 1998という記載が確認できました。
    ちなみに最終改訂はVersion 2.1, Jul. 8, 2002となっています。

    生きた教材としてこれはいいものを見つけました。
    文書の内容ではなく、こんなところでテンション爆上がりしてるのは自分くらいでしょうけど。


      at 12:27 |
      2014/07/25

      XSLT 2.0 で正規表現による置換処理を行う

      xml 

      XSLT 1.0 は文字列の処理が貧弱で、concat(), contains(), string-length(), substring() くらいの本当に基本的な関数しか用意されていないのでちょっとしたテキスト処理をやるだけで苦労することが多々ありましたが、XSLT 2.0 からはちゃんと正規表現が使えるようになっているようなのでちょっとためしてみました。

      詳細については仕様書の 15 Regular Expressions にまとまっています*1
      これによると <xsl:analyze-string> を使うと正規表現で文字列を変換することができるみたいです。仕様を読む限りは他の言語の gsub() のような感じでしょうか。

      <xsl:analyze-string select="(XPath)" regex="(正規表現)"> <xsl:matching-substring> <!-- マッチしたとき --> </xsl:matching-substring> <xsl:non-matching-substring> <!-- マッチしなかったとき --> </xsl:non-matching-substring> </xsl:analyze-string>

      後方参照については15.2 Captured Substrings に記載されていますが、regex-group() という関数を呼び出すことによって可能になるようです。

      [XSLT 2.0 で正規表現による置換処理を行う の続きを読む]

      at 19:34 |
      2014/06/06

      XSLT によるルックアップテーブルの実現

      xml 

      XSL で簡単なルックアップテーブルを実現しようとしたら、思ったより苦戦してしまったので忘れないうちにやり方をメモ。
      今回やりたかったのは、下記のような2つの XML (item.xml, lookup.xml) があった場合に、これらをまとめて一つの XML に出力するというもの。

      item.xml

      <root> <item id="a" /> <item id="b" /> <item id="c" /> <item id="d" /> </root>

      lookup.xml

      <record_set> <record id="a">1111</record> <record id="b">2222</record> <record id="c">3333</record> <record id="d">4444</record> <record_set>

      result.xml

      <root> <item id="a" name="1111"/> <item id="b" name="2222"/> <item id="c" name="3333"/> <item id="d" name="4444"/> </root>

      以下、作業メモ。

      [XSLT によるルックアップテーブルの実現 の続きを読む]

        at 20:34 |
        2014/05/30

        XSLT 2.0 で ISO 8601 形式の日付を処理する

        xml 

        XSLT は組み込みの関数が貧弱なので、日付の処理はできないと思い込んでいたのですが、XSLT 2.0*1ではいろいろと日付関連の関数が加わっていたことがわかったので、ちょっと使い方を調べてみました。

        今回やりたかったのは下記のような ISO 8601 形式の日付でタイムゾーンがバラバラの場合にこれらをローカルタイムに変換するという処理。

        <root> <date>2014-05-30T15:00:00Z</date> <date>2014-05-31T00:00:00+09:00</date> </root>

        これらはいずれも JST では 2014-05-31 00:00:00 なので、これを下記のように変換する XSL を書いてみます。

        <root> <jst>2014-05-31 00:00:00</jst> <jst>2014-05-31 00:00:00</jst> </root>

        以下、作業メモ。

        [XSLT 2.0 で ISO 8601 形式の日付を処理する の続きを読む]

        at 20:45 |
        2014/05/23

        XSLT でテキストノードの出力を止めるには

        xml 

        久々にちょっと xsl を書いたらビルトインテンプレートの部分でハマってしまったので、忘れないようにメモ。

        XSLT には仕様にビルトインテンプレートというものが含まれているので、特に何も書かなくてもテキストノードの部分は最終結果に出力されます
        これについては 5.8 Built-in Template Rules で下記のように書かれています。

        5.8 Built-in Template Rules - XSL Transformations (XSLT)

        There is also a built-in template rule for text and attribute nodes that copies text through:
        <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>

        場合によってはこの挙動が邪魔なことがあるのですが、このビルトインテンプレートを削除することはできません。ただし、このビルトインテンプレートは他のすべてのテンプレートよりも優先順位が低く設定されているので、明示的にルールを上書きすれば無効化することはできるようになっています*1。そんなわけで、こんな感じのルールをテンプレートに付け足して事なきを得ました。

        <xsl:template match="text()|@*" />
        • *1: The built-in template rules are treated as if they were imported implicitly before the stylesheet and so have lower import precedence than all other template rules. Thus, the author can override a built-in template rule by including an explicit template rule.

        at 23:11 |
        2014/03/24

        xmllint で XML ファイルを整形する

        cli  xml 

        普段人が眺めることがない XML ファイルは容量削減のために改行やインデントが取り除かれていることがあります。

        example.xml

        <?xml version="1.0" encoding="utf-8"?> <root><items><item>いち</item><item>に</item><item>さん</item></items></root>

        これを人が見やすい形にするためには、もちろんローカルに持ってきてブラウザで開く・・・という簡単な方法もありますが、ちょっと大きめの XML ファイルになってくるとブラウザが固まったりして何かと不便。そんなときはコマンドラインの xmllint に頼りましょう。 --format オプションをつけると、こんな感じでインデントされた出力結果を得ることができます。インデントされた形式だと、2つの XML を diff で比較したい場合にも便利なんですよね。

        $ xmllint --format example.xml

        <?xml version="1.0"?> <root> <items> <item>&#x3044;&#x3061;</item> <item>&#x306B;</item> <item>&#x3055;&#x3093;</item> </items> </root>

        数値文字参照になってしまうのがイヤな場合は下記のように --encode で文字コードを指定することができます。

        $ xmllint --format --encode utf-8 example.xml

        <?xml version="1.0" encoding="utf-8"?> <root> <items> <item>いち</item> <item>に</item> <item>さん</item> </items> </root>

        もちろん CP932 のような文字コードも指定できます。

        $ xmllint --format --encode CP932 example.xml | nkf -Sw

        <?xml version="1.0" encoding="CP932"?> <root> <items> <item>いち</item> <item>に</item> <item>さん</item> </items> </root>

          at 17:55 |
          2013/12/05

          シェルスクリプトで XML を処理する

          xml  cli  sh 

          先日、JSON をシェルスクリプトで処理する方法をやりましたが、XML についてもツールがあるのでまとめておきます。

          コマンドラインから XML を扱うツールとしては CPAN に XML-XPath*1 というモジュールがあり、これに付属している xpath というコマンドを使う手もあるのですが、出力のフォーマットにあまり融通が利かないので、sed や awk で加工する必要があります。今回はそれがイヤなので、XMLStarlet を使う方法をメモしておきます。

          インストール

          CentOS であれば yum install xmlstarlet でインストールできます。

          使い方

          使い方はこんな感じ。 サンプルは以前に使ったもの。

          $ echo "<a><b><c>1111</c><d>a1</d></b><b><c>2222</c><d>a2</d></b></a>" | xmlstarlet sel -t -v "//b[./c/text() = '2222']/d" a2 $ echo "<a><b><c>1111</c><d>a1</d></b><b><c>2222</c><d>a2</d></b></a>" | xmlstarlet sel -t -m "//c" -v "concat(position(),':',.,'&#xa;')" 1:1111 2:2222

          -m でノードを選択して、-v (--value-of) で表示するという感じになります。
          XPath や XSL に馴染んでいればかなりカスタマイズが利くので便利です。

          [シェルスクリプトで XML を処理する の続きを読む]

          at 15:22 |
          2011/12/14

          コマンドラインから xsl を使う

          xml  cli 

          手軽に XML ファイルに XSLT を適用するツールがないかなと思って探してみたら、 libxslt に付属の xsltproc というものが見つかったのでメモ。

          The xsltproc tool

          This program is the simplest way to use libxslt: from the command line. It is also used for doing the regression tests of the library.
          It takes as first argument the path or URL to an XSLT stylesheet, the next arguments are filenames or URIs of the inputs to be processed. The output of the processing is redirected on the standard output.

          使い方としては xsltproc (xslt file) (xml file) という感じで使えるようです。
          それぞれのファイル指定はURLでもいいみたいなので、ネットワーク越しに xsl や xml を取り寄せて変換することができます。

          以下、作業メモ。

          [コマンドラインから xsl を使う の続きを読む]

            at 23:37 |
            2009/12/12

            XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Ruby編)

            ruby  trac  xml 

            以前に間に合わせで書いたTracにXML-RPCを投げるスクリプトがPerlだったのでRubyに書き換えようと思って作業を始めてみたら思ったより手間がかかってしまいました。

            ブラウザはどちらも同じように認証用のダイアログを出してくるので分かりにくいのですが、TracLightningを使ってTracをインストールすると、認証はBasic認証ではなくてDigest認証になっています。このDigest認証をXML-RPC時にやるというのがかなりの曲者です。初めこれをすっかり忘れていて、XMLRPC::Clientを使って実装した後に認証が通らなくて色々調べる羽目になりました。

            /usr/lib/ruby/1.8/xmlrpc/client.rb

            If ((|user|)) and ((|password|)) are given, each time a request is send, a Authorization header is send. Currently only Basic Authentification is implemented no Digest.

            上記の通り、rubyのXML-RPCライブラリであるXMLRPC::ClientはDigest認証に対応していません。
            というか、僕の調べた限りではnet/httpなどのRubyの標準添付のライブラリでDigest認証に対応しているものはないようです。

            [XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Ruby編) の続きを読む]

              at 23:55 |
              «Prev || 1 · 2 · | Next»
              » ArchiveList (Tag for "xml" )