初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-05-07 16:48:26

nick1
Guest

HTLMの解析の為にタグを抜き取りたい

HTLMの解析をしたいです。
<div> や <div class="Product__Info ">の範囲を
関数を使って抜き取りたいのですが
その中に何個も<div>があると抜き取れません。
どうすればいいでしょうか?><;

#2 2021-05-07 16:56:30

himadanee
Guest

Re: HTLMの解析の為にタグを抜き取りたい

HTMLのツール(ブラウザについてます)を使うのがいいのでは。
省略可能な閉じタグなど不確定要素があるので、テキスト関数で取り出すのは、ほぼ無理だと思います。
JavaScriptでできるのかなあ。

#3 2021-05-07 17:54:19

nick1
Guest

Re: HTLMの解析の為にタグを抜き取りたい

ご返答ありがとうございます!
既にFilemakerにHTMLが入っていてFilemakerで処理をしたいと思っています。
省略可能な閉じタグがない場合でしたら可能でしょうか?
カスタム関数が理想ですが、難しければスクリプトでもいいです。
宜しくお願い致します。

#4 2021-05-07 23:39:33

Shin
Member

Re: HTLMの解析の為にタグを抜き取りたい

https://fm-aid.com/bbs2/viewtopic.php?id=11630
の最後の方のカスタム関数でいけるでしょう。属性付きのタグがあるのなら、微調整は必要かもしれません

Last edited by Shin (2021-05-07 23:41:06)

Offline

#5 2021-05-08 04:33:53

Hiro
Member

Re: HTLMの解析の為にタグを抜き取りたい

Substitute関数を使った簡便な解法案をば!!
属性パラメータの有無に関わらず<div>タグの「outerHTML」を抜き出す式例。
(もちろん innerHTML のみも式の調整で可能です)

●例えば元のHTML文が、
<html>
<body>
<div>AAAA</div>
aaaaa
12345
<div class="Product__Info ">BBB</div>
<div>CCC</div>
zzzz123
<div id="item-001">001</div>
</body>
</html>
↓として
●その計算結果は、
<div>AAAA</div>
<div class="Product__Info ">BBB</div>
<div>CCC</div>
<div id="item-001">001</div>

++++++++++
Let([
   #htm=Substitute(HTML文; ["""";""""""]);
   #fnc=Substitute(
      "Left(""" & #htm & """;0)"
      ; ["<div"; """;0) & ""<div"]
      ; ["</div>"; "</div>\¶"" & Left("""]
      )
];
  Evaluate(#fnc)
)

Offline

#6 2021-05-09 09:21:07

himadanee
Guest

Re: HTLMの解析の為にタグを抜き取りたい

Hiroさんのは<div>が入れ子になってる場合に対応してないですよね。
Shinさんのカスタム関数は、このページのソースを対象に実験したら、6番目以降のdivを取得しようとすると変な結果になった。(ページの先頭から取り出す?)

#7 2021-05-10 00:12:20

Hiro
Member

Re: HTLMの解析の為にタグを抜き取りたい

確かにHTMLはタグ構造化言語だから、<div>タグの入れ子対策は避けられないことでしたネ!!
少し複雑になりますが、入れ子対応化した修正式例です。
(※解析<div>タグ数に限界数がありますが、このページのソースHTML(<div>:120個)で軽くテストして診ましたが、一応最大 310個 位までなら動作OKのようです。)

  • 例えば元のHTML文が、
    <html>
    <body>
    <div>AAAA01
    <div>XXX
    <div>YYY
    <li>111</li>
    <li>222</li>
    <li>333</li>
    </div>ZZZ
    </div>AAA03</div>
    aaaaa
    12345
    <div class="Product__Info ">BBB</div>
    <div>CCC</div>
    zzzz123
    <div id="item-001">001</div>
    </body>
    </html>
    ↓の時

  • その計算結果は、(全ての<div>内を切り出す→<div>内の非<div>タグも全て書き出す!)
    <div>AAAA01
       <DIV>XXX
       <DIV>YYY <li>111</li> <li>222</li> <li>333</li>
       </DIV>
       ZZZ
       </DIV>
       AAA03</div>
    <div class="Product__Info ">BBB</div>
    <div>CCC</div>
    <div id="item-001">001</div>
       

  • その修正式(ループ再帰式で、解析<div>タグ数に限界数あり)です。

    Let(
    [
       $htm=HTML文;
       $i=0;
       $fnc="Case($i=Max(0; PatternCount($htm;""<div"")-1); $htm;
             Let([
                $i=$i+1;
                #flg=Position($htm;""</div>"";1;$i) > Position($htm;""<div"";1;$i+1);
                $htm=Case(#flg; Replace($htm; Position($htm;""<div"";1;$i+1); 0; ""_""); $htm);
                $htm=Case(#flg; Replace($htm; Position($htm;""</div"";1;$i); 0; ""_""); $htm)
             ]; Evaluate($fnc))
             )"
    ];

          Let(
          [
             #htm=Substitute(Evaluate($fnc); ["""";""""""]; ["_<div";"\¶   <DIV"];["_</div>";"\¶   </DIV>\¶   "]);
             #fnc=Substitute("Left(""" & #htm & """;0)"; ["<div"; """;0) & ""<div"]; ["</div>"; "</div>\¶"" & Left("""])
          ];
             Evaluate(#fnc)
          )

    )

Last edited by Hiro (2021-05-10 20:42:22)

Offline

#8 2021-05-10 08:58:14

Shin
Member

Re: HTLMの解析の為にタグを抜き取りたい

このページのソースで検証しましたが、10個目までは正しく動いています。それ以降も見た目は正しいようですが。 見つからなかった時の処理が漏れていました。修正してあります。

Last edited by Shin (2021-05-12 10:37:00)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 521.84 KiB (Peak: 526.74 KiB) ]