3

XML Simple を使用して XML ファイルを解析していますが、問題のある部分は次のようになります。

    <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

何らかの理由で XML::Simple が完全に無視する<text>SECTION A <emdash/> HUMAN NECESSITIES</text> のは、emdash タグが<text>AGRICULTURE</text>問題なく解析されるためだと思います。また、次の方法でパーサーを設定しようとしました。

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

まだ行きません。何か案が?

4

2 に答える 2

5

値にテキストと他のタグの両方が含まれるタグを持つことを「混合コンテンツ」と呼びます。 XML :: Simpleは混合コンテンツを処理しません(とにかく、役に立たない)。XML :: Simpleのユニバースのビューでは、タグにテキストまたは他のタグのいずれかを含めることができますが、両方を含めることはできません。それが「シンプル」と呼ばれる理由です。そのドキュメントを引用するには:

混合コンテンツ(テキストコンテンツとネストされた要素の両方を含む要素)は、便利な方法で表現されません。要素の順序と重要な空白が失われます。混合コンテンツを処理する必要がある場合、XML::Simpleはあなたの仕事に適したツールではありません

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

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

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

大丈夫です。(&#8212;emダッシュです。)

于 2010-11-21T08:28:18.910 に答える
4

XML::Simpleそれをすべて解析していますが、細かいマニュアルから、混合コンテンツをうまく処理していません:

混合コンテンツ (テキスト コンテンツとネストされた要素の両方を含む要素) は、有用な方法で表現されません。要素の順序と重要な空白が失われます。混合コンテンツを扱う必要がある場合、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 は存在しますが、混合コンテンツはむしろ混乱しています。

于 2010-11-21T08:36:40.343 に答える