XML :: Simple忽略emdash标签?

sno*_*kin 3 xml perl xml-simple

我正在使用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
Run Code Online (Sandbox Code Playgroud)

出于某种原因,XML :: Simple完全忽略了<text>SECTION A <emdash/> HUMAN NECESSITIES</text> 我猜它因为emdash标签,因为<text>AGRICULTURE</text>解析得很好.我还尝试通过以下方式设置解析器:

$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
Run Code Online (Sandbox Code Playgroud)

仍然没有去.任何的想法?

cjm*_*cjm 5

具有其值包括文本和其他标签的标签被称为"混合内容". XML :: Simple不处理混合内容(无论如何都没有用).在XML :: Simple的Universe视图中,标记可以包含文本或其他标记,而不是两者.这就是为什么它被称为"简单".引用其文档:

混合内容(包含文本内容和嵌套元素的元素)将不会以有用的方式表示 - 元素顺序和重要的空白将丢失.如果您需要处理混合内容,那么XML :: Simple不适合您的工作

您必须选择不同的XML模块. XML :: LibXMLXML :: Twig是流行的选择.

另一种可能性是让生成XML的人使用实体而不是标签来表示像破折号这样的字符.例如,XML :: Simple可以处理:

<text>SECTION A &#8212; HUMAN NECESSITIES</text>
Run Code Online (Sandbox Code Playgroud)

正好.(&#8212;是一个短跑.)