【发布时间】:2011-10-05 03:02:18
【问题描述】:
我正在使用 XML::LibXML 解析 XML 文件。对于以下 XML 条目,我收到错误:
Malformed UTF-8 character (fatal) at C:/Perl64/site/lib/XML/LibXML/Error.pm line 217
这是
$context=~s/[^\t]/ /g;
XML中的条目如下
<MedlineCitation Owner="NLM" Status="MEDLINE">
<PMID Version="1">15177811</PMID>
<DateCreated>
<Year>2004</Year>
<Month>06</Month>
<Day>04</Day>
</DateCreated>
<DateCompleted>
<Year>2004</Year>
<Month>08</Month>
<Day>11</Day>
</DateCompleted>
<DateRevised>
<Year>2011</Year>
<Month>04</Month>
<Day>07</Day>
</DateRevised>
<Article PubModel="Print">
<Journal>
<ISSN IssnType="Print">0278-2626</ISSN>
<JournalIssue CitedMedium="Print">
<Volume>55</Volume>
<Issue>2</Issue>
<PubDate>
<Year>2004</Year>
<Month>Jul</Month>
</PubDate>
</JournalIssue>
<Title>Brain and cognition</Title>
<ISOAbbreviation>Brain Cogn</ISOAbbreviation>
</Journal>
<ArticleTitle>Efficiency of orientation channels in the striate cortex for distributed categorization process.</ArticleTitle>
<Pagination>
<MedlinePgn>352-4</MedlinePgn>
</Pagination>
<Affiliation>Cognitive Science Department, Université de Liège, Belgium. mmermillod@ulg.ac.be</Affiliation>
<AuthorList CompleteYN="Y">
<Author ValidYN="Y">
<LastName>Mermillod</LastName>
<ForeName>Martial</ForeName>
<Initials>M</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Chauvin</LastName>
<ForeName>Alan</ForeName>
<Initials>A</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Guyader</LastName>
<ForeName>Nathalie</ForeName>
<Initials>N</Initials>
</Author>
</AuthorList>
<Language>eng</Language>
<PublicationTypeList>
<PublicationType>Journal Article</PublicationType>
</PublicationTypeList>
</Article>
<MedlineJournalInfo>
<Country>United States</Country>
<MedlineTA>Brain Cogn</MedlineTA>
<NlmUniqueID>8218014</NlmUniqueID>
<ISSNLinking>0278-2626</ISSNLinking>
</MedlineJournalInfo>
<CitationSubset>IM</CitationSubset>
<CommentsCorrectionsList>
<CommentsCorrections RefType="ErratumIn">
<RefSource>Brain Cogn. 2005 Jul;58(2):245</RefSource>
</CommentsCorrections>
<CommentsCorrections RefType="RepublishedIn">
<RefSource>Brain Cogn. 2005 Jul;58(2):246-8</RefSource>
<PMID Version="1">16044513</PMID>
</CommentsCorrections>
</CommentsCorrectionsList>
<MeshHeadingList>
<MeshHeading>
<DescriptorName MajorTopicYN="Y">Neural Networks (Computer)</DescriptorName>
</MeshHeading>
<MeshHeading>
<DescriptorName MajorTopicYN="N">Neurons</DescriptorName>
<QualifierName MajorTopicYN="N">physiology</QualifierName>
</MeshHeading>
<MeshHeading>
<DescriptorName MajorTopicYN="N">Orientation</DescriptorName>
<QualifierName MajorTopicYN="Y">physiology</QualifierName>
</MeshHeading>
<MeshHeading>
<DescriptorName MajorTopicYN="N">Pattern Recognition, Visual</DescriptorName>
<QualifierName MajorTopicYN="Y">physiology</QualifierName>
</MeshHeading>
<MeshHeading>
<DescriptorName MajorTopicYN="N">Visual Cortex</DescriptorName>
<QualifierName MajorTopicYN="Y">physiology</QualifierName>
</MeshHeading>
</MeshHeadingList>
</MedlineCitation>
但是我想要从这个条目中得到的东西是 PMID、DateRevised、PubDate、ArticleTitle、CommentsCorrectionList 和 MeshHeadingList。但是,如果我删除包含其他字符的 Affiliation,则此错误不再存在。我应该如何解决这个错误?
【问题讨论】:
-
你的文件真的是用 UTF-8 保存的吗?我怀疑它不是,但 LibXML 认为它是,并且当它击中“列日大学”位时会变得很生气。
-
@XavierHolt 由于您的意思是文件开头的行“”?如果是,它有这条线。如果这是一个愚蠢的问题,我很抱歉,我不属于这个领域。
-
这是一半。该部分告诉您的 XML 解析器期望什么字符编码。另一半是您将文件保存到磁盘的编码。例如,如果您将文件保存为 UTF-8,则
é字符将由字节序列0xC3A9表示,但如果您将文件保存为Windows-1252,它将由单个字节0xE9表示。如果 LibXML 需要 UTF-8 字符,但遇到不是 UTF-8 的字符,它会抛出错误。 -
现在有用的一点是 - 大多数现代文本编辑器都会为您提供指定特定字符编码的选项。这将是您要尝试的第一件事 - 确保您的文件实际上以 UTF-8 保存,就像您告诉 LibXML 它在
<?xml ?>行中一样。干杯! -
这真的很有帮助。有效。这很好,就像我在文本编辑器中所做的那样。另一个主要问题是我有大量的 XML 数据,它们位于我实验室的服务器上。他们呢?如何将它们转换为 UTF-8。我把它们放在 zip 文件中,然后解压缩。在服务器上解压缩时有什么办法吗?我得到了这个链接docs.moodle.org/20/en/Converting_files_to_UTF-8,它说关于在 UNIX 中转换文件。我应该遵循这个还是你建议任何其他方式来做到这一点?
标签: perl parsing utf-8 xml-libxml