2

組織用に非常にシンプルな CMS を作成しています。

私の戦略は、< editable > というタグの間に編集可能なコンテンツを埋め込むことです。ただし、これらをブラウザーから非表示にするために、コメントアウトしています。したがって、編集可能な領域の例は次のようになります。

<!-- <editable name="news_item> Today's news is ... </editable> -->

「今日のニュースは…」というコンテンツが CMS に取り込まれ、オンラインの HTML エディターで編集可能になります。

タグ内に含まれるコンテンツだけでなく、name 属性の値も「取得」できるようにしたいと考えています。

XPath、XQueyタイプのものでこれを行う簡単な方法はありますか、それとも正規表現が最善の方法ですか( ]特に、xmlがどうなるかを正確に知っているので、正規表現はあまりフォールトトレランスを必要としないことを考えると、それを生成するコードを書きます)。

4

6 に答える 6

3

ほとんどのパーサーは問題なくコメントを取得できます。おそらくそれらを DOM 構造に解析することはありませんが、実際のコメントを取得したら手動で解析できます。

これは、Python でBeautifulSoupを使用する例です。

>>> from BeautifulSoup import BeautifulSoup, Comment
>>> html_document = """
... <html>
... <head>
... </head>
... <body>
... <h1>My Html Document</h1>
... <!-- This is a normal comment. -->
... <p>This is some more text.</p>
... <!-- <editable name="news_item">Today's news is Paolo Rocks!</editable> -->
... <p>Yet More Content</p>
... </body>
... </html>
... """
>>> soup = BeautifulSoup(html_document)
>>> comments = soup.findAll(text=lambda text:isinstance(text,Comment))
>>> comments
[u' This is a normal comment. ', u' <editable name="news_item">Today\'s news is
Paolo Rocks!</editable> ']
>>> for comment in comments:
...     editable = BeautifulSoup(comment).find('editable')
...     if editable is not None:
...             print editable['name'], editable.contents
...
news_item [u"Today's news is Paolo Rocks!"]
于 2009-06-15T06:56:33.150 に答える
3

DOM パーサーとは、javascript のことですか? もしそうなら、このブログ投稿は、実際に HTML コメントを切り刻むことができることを示唆しています。そして、jQuery に言及せずに javascript に言及するのは罪なので、ここにすべての HTML コメントを見つける jQuery プラグインがあります。

于 2009-06-15T07:03:12.137 に答える
2

コメントの要点は、DOM がコンテンツを解析しないということです。したがって、コメント全体は単なるテキストです。

この場合、RegExを使用したいと思います。

ただし、コンテンツが HTML であることがわかっている場合は、DOM 要素 (DIV など) を作成し、コメント テキストを innerHTML に割り当てます。要素から作成された DOM を調べることができます。必要なものを取得したら、現在のドキュメントに追加したことのない DIV 要素を削除できます。

于 2009-06-15T06:56:29.623 に答える
0

正規表現または別の方法で手動で解析する必要があると確信しています。私が知る限り、コメントは DOM 要素とは見なされません。

于 2009-06-15T06:54:12.063 に答える
0

Dojo がよく行うように、costum 属性を持つ DIV を使用できます。

<div ParseByCMS="true">foobar foo bar foobaz</div>

その後、javascript または xslt を使用して解析し、削除します。

于 2009-06-15T06:59:46.950 に答える
0

PHPを使用している場合。

    $xpath = new DOMXpath(new DOMDocument());

    // Search for comments
    $comments = $xpath->query('//comment()');
于 2009-06-15T07:02:24.570 に答える