2010-11-21 12 views
3

私は問題の一部は、そのように見える、XMLファイルを解析するシンプルなXMLを使用しています:何らかの理由でXMLのXML ::単純なemdashタグを無視しますか?

<textBody> 
     <title> 
      <titlePart> 
       <text>SECTION A <emdash/> HUMAN NECESSITIES</text> 
      </titlePart> 
     </title> 
    </textBody> 
    <ipcEntry kind="t" symbol="A01" ipcLevel="C" entryType="K" lang="EN"> 
     <textBody> 
      <title> 
       <titlePart> 
        <text>AGRICULTURE</text> 
       </titlePart> 
      </title> 
     </textBody> 
    </ipcEntry 

:: Simpleは完全に<text>SECTION A <emdash/> HUMAN NECESSITIES</text> を無視<text>AGRICULTURE</text>があるので、私は、そのemdashタグので推測ちょうどいいです。 また、次のようにパーサーを設定しようとしました。

$XML::Simple::PREFERRED_PARSER = 'XML::Parser'; 

まだ行っていません。

+0

[XML ::シンプルなのはなぜでしょうか? "](http://stackoverflow.com/questions/33267765/why-is-xmlsimple-discouraged) – Sobrique

答えて

5

値がテキストと他のタグの両方を含むタグを持つことを「混合コンテンツ」といいます。 XML::Simpleは混在したコンテンツを扱いません(とにかく便利ではありません)。ユニバースのXML :: Simpleのビューでは、タグにはテキストまたは他のタグのいずれかを含めることができ、両方を含めることはできません。それが「シンプル」と呼ばれる理由です。 its docsを引用すると: - 要素の順序と大きな空白が失われます

混合コンテンツ(テキストコンテンツとネストされた要素の両方が含まれている要素は)便利な方法で表現されません。混合コンテンツで作業する必要がある場合、XML :: Simpleはあなたの仕事にとって適切なツールではありません。

別のXMLモジュールを選択する必要があります。 XML::LibXMLXML::Twigが一般的です。

もう1つの可能性は、ダッシュのような文字を表すためにタグの代わりにエンティティを使用するようにXMLを作成した人になることです。たとえば、XML :: Simpleでは次のように処理できます。

<text>SECTION A &#8212; HUMAN NECESSITIES</text> 

(。&#8212;は、全角ダッシュです)

+0

XML :: Twigを試してみると素敵なモジュールのようです。 – snoofkin

4

XML::Simpleはそれをすべてを解析しているが、それはfine manualから、その十分に混合したコンテンツを処理しない:

混合コンテンツを(テキストコンテンツとネストされた要素の両方を含む要素)は ではありません。要素の順序と重要な空白が失われます。 混在したコンテンツを扱う必要がある場合は、XML :: Simpleはあなたの ジョブに適したツールではありません。次のセクションをご覧ください。例えば

、この:

use Data::Dumper; 
use XML::Simple; 
print Dumper(XMLin(qq{ 
    <textBody> 
     <title> 
      <titlePart> 
       <text>SECTION A <emdash/> HUMAN NECESSITIES</text> 
      </titlePart> 
     </title> 
    </textBody> 
})); 

収量:

$VAR1 = { 
    'title' => { 
     'titlePart' => { 
      'text' => { 
       'emdash' => {}, 
       'content' => [ 
        'SECTION A ', 
        ' HUMAN NECESSITIES' 
       ] 
      } 
     } 
    } 
}; 

だからemdashがありますが、混合コンテンツは、むしろ混同されます。

+0

混合コンテンツが役に立たないということは、実際には、私の人生はより困難になります。ありがとう、 – snoofkin

関連する問題