2012-04-25 1 views
1

私は巨大なWordpress XMLエクスポートを持っています。残念なことに、いくつかの悪態はインストールにコードを注入し、DIVをコンテンツに注入しました。 今私はその混乱をきれいにしたい。XMLファイルからスタイル属性を持つDIVタグを削除するにはどうすればよいですか?

<p>Normal Text</p> 
<div style="position:absolute;top:-9660px;left:-4170px;"><a href="http://insane.link.com">Insane Linktext</a></div> 
<div style="position:absolute;top:-2460px;left:-5370px;"><a href="http://insane.link.com">Another Insane Linktext</a></div> 
<p>Normal good people's brains' text</p> 

私はSTYLE属性を含むDIVと一致する正規表現を使用することを考えました。使用可能なツールは、Aptanaまたは他のテキストエディタ、PHPサーバ、OSXターミナルです。これに対する提案?

ありがとうございました!

答えて

0

これはあなたを助けるかもしれない:それはあなたが上記のdiv要素にマッチします:

<div style="[a-zA-Z0-9-:;]+"><a href="[a-z:/.]+">[a-zA-Z ]+</a></div> 

しかし、それだけでスタイル属性と他には何を持っているdiv > a > textパターンだけdivを一致します。

あなたが行うことができるはず検索と置換ほとんどのHTMLエディタ(Dreamweaverとメモ帳++の両方がそれを許す)

+0

、すでにいくつかのを発見しました。マークアップは時々違います。だから私はちょうどDIVとマッチするだけでいいです。私は '

('.*?')
'を試しましたが、何も見つかりませんでした。 – cukabeka

+0

OK、私はちょうど私のためにうまくいく解決策を見つけました: '

.*
'Editraエディタを使用しています。その方向へ私を指摘してくれてありがとう! – cukabeka

+2

正規表現とXMLに関する義務的な健康警告を投稿する必要がありますhttp://stackoverflow.com/a/1732454/169346 – JeremyP

2

私は正規表現を使用しますが、実際のXMLパーサーを使用していないお勧めを使用。たとえば、あなたがOS Xにしているので、RubyはあなたとあなたのHTMLをクリーンアップすることができ、すでにインストールされているので、:あなたが最初のコメントあたりの鋸山をインストールする必要があります

require 'nokogiri'      # Use `sudo gem install nokogiri` first 
html = Nokogiri.HTML(IO.read(ARGV[0])) # read and parse the HTML document 
html.css('div[style]').remove   # destroy all <div style="...">...</div> 
File.open(ARGV[1],'w'){ |f| f << html } # write the html to disk as a new file 

次に「clean_divs.rb」と入力してからruby clean_divs.rb my.html my_fixed.htmlと入力します(最初は読み込むファイルの名前、2番目は書き込むファイルの名前)。

より正確に破壊したい場合は、XPathを使用して破棄する要素を選択することができます。 html.xpath('//div[@style][a]').removeは、スタイル属性を持つdivと、直接子要素<a>のみを検索します。

+0

チュートリアルのおかげで、私はエディタを使用することをお勧めしましたが、私はこれを次回保存します。 – cukabeka

0

あなたがそれらを除去するためのもの<div>の要素の空のテンプレートを変更しidentity transformを使用することができます:ええ、それは正しいアプローチだ

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <!--default processing for content is to copy forward --> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <!--remove the rogue div elements --> 
    <xsl:template match="div[@style]" /> 

</xsl:stylesheet> 
+0

残念ながら、私はどのようにXSL変換を適用するか分かりません。変換を行うためにエディタ、ブラウザ、またはサーバを使用しますか? – cukabeka