PHPのXPathでいくつかのことをするのに助けが必要です。任意のHTMLでPHPとXPathのヘルプ
、私が行う必要があります。
- は、すべてのテーブルとその内容
- を削除する最初のH1タグ
- 後、すべてを削除し、その内側のHTMLのみを含む段落((リンク、リストにしてくださいなど))
正規表現では、私は完全に動作しています。しかし、ネストしたテーブルに遭遇したとき、私は正規表現でHTMLを解析するのは本当に愚かであると判断しました。
ありがとうございます!
PHPのXPathでいくつかのことをするのに助けが必要です。任意のHTMLでPHPとXPathのヘルプ
、私が行う必要があります。
正規表現では、私は完全に動作しています。しかし、ネストしたテーブルに遭遇したとき、私は正規表現でHTMLを解析するのは本当に愚かであると判断しました。
ありがとうございます!
を、私が行う必要があります。
•すべてのテーブルとその内容
を削除します•最初のh1の後にすべてを削除します。 タグ
•これは、XSLTで非常に簡単に行うことができます( その内側のHTML(リンク、リスト、など)を含む)のみ段落
をしてください:
あなたの要素の場合<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.w3.org/1999/xhtml" >
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Copy every node except when overriden
by another template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Remove all tables and their contents -->
<xsl:template match="h:table"/>
<!-- Remove everything after the first h1 -->
<xsl:template match="node()[preceding::h:h1]"/>
<!-- Keep only paragraphs (INCLUDING
their inner HTML (links, lists, etc))
-->
<xsl:template match=
"node()[not(self::h:p) and not(ancestor::h:p)]">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
名前がXHtml名前空間にない場合は、上記のコードでh:
の出現を単純に削除してください。
これはとてもいいです。私はXSLTを読む必要があります。これらのソリューションをPHPに組み込むにはどうすればよいですか? XPathクエリを使用するのと似ていますか? – Peter
@Peter:私はPHPを使用していませんが、AFAIK PHPはLibXml/LibXsltプロセッサを使用しています。インターネット上でそれを検索するだけで、多くの例があるはずです。 –
+1良い答え。 –
HTML DOMパーサーを使用することを検討してください。これはXMLよりはるかに簡単です。 xpathステートメントもサポートするパーサーがいくつかあります。しかし、トリッキーな部分は、すべてのHTMLが厳密なxhtml標準に準拠しているわけではないので、ルールが必ずしも適用しにくいということです。ここに私が出会ったいくつかのDOMパーサがあります。いくつかのサポートのXPathと一部だけでコンテンツを選択する他の方法があります任意のHTMLで
代わりに[DOM](http://php.net/manual/en/book.dom.php)を実際に使用する[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/)のサードパーティの代替案を提案しました。文字列の解析:[phpQuery](http://code.google.com/p/phpquery/)、[Zend_Dom](http://framework.zend.com/manual/en/zend.dom.html)、[QueryPath ](http://querypath.org/)および[FluentDom](http://www.fluentdom.org)。 – Gordon
未処理(x)XSLTを使用したHTMLは単純に愚かです。あなたの(x)Htmlと望む結果の完全な例を提供してください。 –
良い質問、+1。完全で短いXSLTソリューションについては私の答えを見てください。 :) –