无法分析形成不良的XML(Cannot parse poorly formed XML)

我一直试图解析这个提要 。 如果你点击该链接,你会发现它甚至无法在浏览器中正确解析它。

无论如何,我的托管服务不会让我使用simplexml_load_file,所以我一直使用cURL来获取它,然后将字符串加载到DOM中,如下所示:

$dom = new DOMDocument;
$dom->loadXML($rawXML);
if (!$dom) {
 echo 'Error while parsing the document';
 exit;
}
$xml = simplexml_import_dom($dom);

但我得到错误(“DOMDocument :: loadXML()[domdocument.loadxml]:实体'nbsp'没有在实体中定义”),然后我尝试使用SimpleXMLElement没有运气(它显示相同的错误“解析器错误:实体'nbsp'未定义“等等,因为那个元素中的HTML)。

$xml = new SimpleXMLElement($rawXML);

所以我的问题是,如何跳过/忽略/移除该元素,以便我可以解析其余的数据?


编辑:感谢mjv的解决方案!...我只是这样做(对于其他人有同样的麻烦)

$rawXML = str_replace('<description>','<description><![CDATA[',$rawXML);
$rawXML = str_replace('</description>',']]></description>',$rawXML);

I've been trying to parse this feed. If you click on that link, you'll notice that it can't even parse it correctly in the browser.

Anyway, my hosting service won't let me use simplexml_load_file, so I've been using cURL to get it then loading the string into the DOM, like this:

$dom = new DOMDocument;
$dom->loadXML($rawXML);
if (!$dom) {
 echo 'Error while parsing the document';
 exit;
}
$xml = simplexml_import_dom($dom);

But I get errors ("DOMDocument::loadXML() [domdocument.loadxml]: Entity 'nbsp' not defined in Entity"), then I tried using SimpleXMLElement without luck (it shows the same error "parser error : Entity 'nbsp' not defined", etc... because of the HTML in that one element).

$xml = new SimpleXMLElement($rawXML);

So my question is, how do I skip/ignore/remove that element so I can parse the rest of the data?


Edit: Thanks to mjv for the solution!... I just did this (for others that have the same trouble)

$rawXML = str_replace('<description>','<description><![CDATA[',$rawXML);
$rawXML = str_replace('</description>',']]></description>',$rawXML);

原文:https://stackoverflow.com/questions/1518142
2024-03-26 18:03

满意答案

是的,你认为POI会这样做是错误的。 Apache POI适用于Microsoft Office文件格式,而PDF则不适用。

您要么直接使用Apache PDFBox ,要么使用Apache Tika ,它将同时使用Microsoft Office和PDF文件格式(以及许多其他格式)。


Yes, you are wrong in believing that POI will do that. Apache POI works with Microsoft Office file formats, which PDF isn't.

You'll either want to use Apache PDFBox directly, or us Apache Tika which will do both Microsoft Office and PDF file formats (amongst many others).

相关问答

更多

Apache POI性能(Apache POI Performance)

测试结果在我的机器上: HSSF:2秒 SXSSF:5秒 XSSF:27秒 机器规格: CPU: Intel i3-2100, 3.10 GHz, 4-cores RAM: 16GB OS: Windows 7 64bit JDK: 1.7.0_76 我进行了分析,发现由于xmlbeans和poi-ooxml-schemas库中的同步方法, xmlbeans速度很慢。 您可以通知poi开发人员并要求检查此案例。 Test results on my machine: HSSF: 2 sec S...

apache poi从右到左(right to left with apache poi)

我重新解决了问题,这很简单,问题是由于我用阿拉伯语替换法语单词,因此他们只是用来定位我必须修改文本的地方,他们可以是任何一个charchter,更合适的是阿拉伯语! i resloved the problem it's so simple , the problem is due that i replace french word with arab ones and since this they are just a words used to locate where i have to...

使用Apache poi设置边距(Set margins with Apache poi)

感谢Gagravarr指出我正确的方向。 似乎我没有完整的ooxml-schemas-1.1.jar。 此代码现在可以完美地设置边距 CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); CTPageMar pageMar = sectPr.addNewPgMar(); pageMar.setLeft(BigInteger.valueOf(720L)); pageMar.setTop(BigInteger...

JasperReports会替换Apache POI(M $)和iText(PDF)吗?(Does JasperReports replace Apache POI (M$) and iText (PDFs)? [closed])

如果您的组织(或客户)处于以下情况,Jasper可以带来好处: 无法承受更强大的解决方案,如Crystal Reports(或Cognos等) 需要高度定制的/用户可配置的临时报告解决方案,这些解决方案非常易于集成到现有应用程序中(基于Web或桌面):思考“嵌入式”解决方案。 我使用Jasper Reports作为后端报告生成器(内部Jasper使用Apache POI生成XLS,使用iText生成PDF)构建了一个完全动态的,基于Web的临时报告解决方案。 其他报告包是否可以使用? 我相信它会有...

如何使用Apache POI从PDF中提取原始文本?(How can I extract raw text from PDFs using Apache POI?)

是的,你认为POI会这样做是错误的。 Apache POI适用于Microsoft Office文件格式,而PDF则不适用。 您要么直接使用Apache PDFBox ,要么使用Apache Tika ,它将同时使用Microsoft Office和PDF文件格式(以及许多其他格式)。 Yes, you are wrong in believing that POI will do that. Apache POI works with Microsoft Office file formats,...

如何使用Apache POI从MS word文档的文本框中获取文本?(How to get text from textbox of MS word document using Apache POI?)

这对我有用, private void printContentsOfTextBox(XWPFParagraph paragraph) { XmlObject[] textBoxObjects = paragraph.getCTP().selectPath(" declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' declare namesp...

Apache POI和Aspose?(Apache POI and Aspose?)

任何人都可以向我建议我应该去哪一个? Apache POI和Aspose有哪些限制? 这是非常困难和普遍的问题,只能有非常普遍的答案。 每个软件项目都有不同的要求和功能。 对于每个项目来说,使用第三方组件的可行性很可能也不同。 要选择不同的第三方很困难,因为您需要做更多或更少的事情 需求评估(哪个产品符合您的要求或者紧密满足) 在购买产品之前和之后看看客户支持有多好 第三方产品的功能比较 找到多少稳定的产品。 检查他们发布了多少个版本。 新版本有错误修复,新功能? 独立来源的任何奖项 API和文档...

如何使用Apache POI处理空行?(How To handle Null Row using Apache POI?)

如果你获取一行,并返回null ,那么这意味着该行的文件中没有存储数据 - 它完全是空白的。 POI默认为您提供文件中的内容。 使用Cells,您可以设置MissingCellPolicy来控制丢失和空白单元格的处理方式。 在Apache POI文档中有一些使用它的例子。 对于行,它们是否存在,因此在获取行时需要检查空值。 If you fetch a row, and get back null, then that means there is no data stored in the fi...

Java Apache POI(Java Apache POI)

1.在java中解决OutOfMemoryError的简单方法是使用JVM选项"-Xmx512M"来增加最大堆大小,这将立即解决你的OutOfMemoryError。 Java虚拟机(JVM)以固定的内存上限运行,您可以对其进行修改: -Xms<size> - Set initial Java heap size -Xmx<size> - Set maximum Java heap size $ java -Xms512m -Xmx1024m JavaApp 2.解决Java中的OutOfMe...

如何使用Apache POI添加上标文本(How to add superscript text using Apache POI)

您在想, RichTextString应该能够解释HTML吗? 不是这样。 它只能将 startIndex Font应用于endIndex 。 可以使用TypeOffset SS_SUPER标记字体 。 例: import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.*; import java.io.FileOutputStream; ...

相关文章

更多

JSTL处理XML详解

JSTL XML processing 标签库:为程序设计者提供了基本的对 XML 格式文件的操作 被 ...

Python解析XML文档

解析XML主要用到pytohn自带的XML库,其次还是lxml库 XML结构,先以一个相对简单但功能 ...

Solr Schema.xml和solrconfig.xml分析

现在我们开始研究载入的数据部分(importing data) 在正式开始前,我们先介绍一个存储了大量 ...

对于XML 以及 DTD的一些了解

DTD 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML ...

Solr Schema.xml和solrconfig.xml分析(转)

Solr Schema.xml和solrconfig.xml分析 (http://yinwufeng. ...

java面试题之XML部分(一)

xml有哪些解析技术?区别是什么?你在项目中用到了xml技术的哪些方面?如何实现的?用jdom解析xm ...

Solr笔记(2)_Schema.xml和solrconfig.xml分析

现在我们开始研究载入的数据部分(importing data) 在正式开始前,我们先介绍一个存储了大量 ...

XML视频教程

PHP学习一本通.pdf PHP公益培训第3部-040-XML Xpath快速解析.wmv PHP公益 ...

JDOM读取XML文件问题

1.XML文件 &lt;?xml version=&quot;1.0&quot; encoding= ...

关于Xstream解析XML的问题

&lt;?xml version=&quot;1.0&quot; encoding=&quot;GB2 ...

最新问答

更多

如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)

请尝试以下方法: $messages = $user->contact_messages()->paginate(10); Try the following: $messages = $user->contact_messages()->paginate(10);

linux的常用命令干什么用的

linux和win7不一样,win7都图形界面,都是用鼠标来操作打开,解压,或者关闭。而linux是没有图形界面的,就和命令提示符一样的一个文本框,操作linux里的文件可没有鼠标给你用,打开文件夹或者解压文件之类的操作都要通过linux常用命令。

由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)

它创建了这些视图: 'auth/login.blade.php', 'auth/register.blade.php', 'auth/passwords/email.blade.php', 'auth/passwords/reset.blade.php', 'layouts/app.blade.php', 'home.blade.php' 并修改这些文件: 'Http/Controllers/HomeController.php', 'routes/web.php' 如果使用--views

如何交换返回集中的行?(How to swap rows in a return set?)

您可以使用特殊的CASE表达式进行ORDER BY如下所示: SELECT * FROM table ORDER BY CASE id WHEN 3 THEN 8 WHEN 8 THEN 3 ELSE id END You can ORDER BY using a special CASE expression like this: SELECT * FROM table ORDER BY CASE id WHEN 3 THEN 8 WHEN 8 THEN 3 ELSE id END

在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)

我建议你制作一个新的TableView Cell,在这个newTableViewCell中,加载第2节中的所有单元格,然后为newTableViewCell提供边框。 但如果您不想这样做,那么您可以使用以下代码: @property(strong,nonatomic) CAShapeLayer* borderPath; -(void)viewDidLayoutSubviews{ [_borderPath removeFromSuperlayer]; UIView *viewToGiveBord

使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)

出于一些奇怪的原因,我现在发现了一个不同的问题, Boost.Spirit SQL语法/词法分析失败 ,其中提供了一些其他解决方案来进行空格跳过。 一个更好的! 以下是根据建议重新编写的示例代码: #include #include #include #include #include #incl

Java中的不可变类(Immutable class in Java)

1.如果我只有final变量的课程? 这会让你远离但不是全部。 这些变量的类型也需要是不可变的。 考虑一下 class MyImmutableClass { // final variable, referring to a mutable type final String[] arr = { "hello" }; // ... } 这允许有人做 myImmutableObject.arr[0] = "world"; 并有效地改变你的不可变类的对象。 此外,建议禁

WordPress发布查询(WordPress post query)

如果你想要在div中包含所有帖子: post_parent) { $myposts = get_posts('numberposts=10&tag=medical&order=DESC'); echo ' '; foreach ($myposts as $post): ?>

如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)

我不确定哪个是MySQL的正确答案,因为它本身还不支持IPv6地址格式(尽管“ WL#798:MySQL IPv6支持 ”表明它将在MySQL v6.0中,当前文档不支持)。 不过,你建议的人建议去2 * BIGINT,但要确保他们是UNSIGNED。 在IPv6的/ 64地址边界处有一种自然分割(因为/ 64是最小的网格块大小),这将与其很好地对齐。 I'm not sure which is the right answer for MySQL given that it doesn't y

是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)

您可以使用Object.keys和Array#find来获取匹配value的key 。 const letters = {a:'26',b:'25',c:'24',d:'23',e:'22',f:'21',g:'20',h:'19',i:'18',j:'17',k:'16',l:'15',m:'14',n:'13',o:'12',p:'11',q:'10',r:'9',s:'8',t:'7',u:'6',v:'5',w:'4',x:'3',y:'2',z:'1'}; function sw