当前位置: 首页 > 知识库问答 >
问题:

php simplexml_load_file和CDATA数据完全丢失

从劲
2023-03-14

我有以下xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<data>
   <item name="general.global.Event"><![CDATA[EVENT!]]></item>
   <item name="general.global.CompanyName"><![CDATA[some name]]></item>
   <item name="general.global.CompanyImprint"><![CDATA[Legal information]]></item>
</data>

我的代码如下

$xml = simplexml_load_file("general.xml") or die("Error: Cannot create object");
print_r($xml);

我的输出缺少CDATA。 怎么做?

SimpleXMLElement Object
(
[item] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.Event
                    )

            )

        [1] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.CompanyName
                    )

            )

        [2] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.CompanyImprint
                    )

            )

    )

共有2个答案

任宾鸿
2023-03-14

文本节点不使用print_r公开。

您可以看到这里的数据,您可以明确地查看它:

print $xml->item[0];
况弘新
2023-03-14

正在读取CDATA,阅读这个答案,您将看到如果您print_r($xml->asxml()); 解析器可以很好地重新编译CDATA信息。

由于某种原因,PHP的var_dumpprint_r没有XML对象的精确表示。 尝试此操作,您仍然可以访问数据:


foreach ($xml->item as $item) {
    if ('general.global.CompanyImprint' === (string)$item['name']) {
        var_dump((string)$item);
    }
}

// prints

string(17) "Legal information"
 类似资料:
  • 我正在使用java,从服务器收到了一些json字符串。我收到了带有readUTF的json字符串,但是有一些数据丢失了。我没有收到每个json包的前两个字符。另一个问题是收到json字符串有延迟。例如,服务器发送了一个json字符串,客户端无法收到它,直到服务器和客户端发送的大约50个json字符串突然显示所有的json字符串。主要问题是什么? 因为服务器用UTF格式发送数据,所以我不能用Buff

  • 我一直在写一个程序,它使用UDP上的停止和等待协议通过局域网和广域网发送数据包。我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际原因是什么?

  • 我在这里得到了商==14385472(完全不是真实值:1438547333…)。它完全失去了所有的部分! 我知道浮点计算不准确(似乎不是全部,我应该知道),但是,正如我所说,错误可能出现在更远的有效数字上。但是这里的红利只有8位数。为什么会发生如此戏剧性的错误? 可选子问题:我应该记住哪些规则来预见未来的此类错误? 请注意:将divident的类型从float改为double可以解决这个问题。

  • 我对使用PrimeFaces 3.4.1和JSF 2.1.6的dataTable有以下问题。第一次加载页面时,数据表中充满了数据库中的数据,但每当在页面上执行操作(编辑链接、数据表排序或过滤)时,数据表就会丢失其数据。DataTable包含来自此类的元素: 在dataTable上执行操作后进行调试时,我们只在envioDatasujeto字段上保留数据,元素上的其他所有数据都会丢失。 这是xhtm

  • 问题内容: 如PHP文档中所述,当使用包含长整数的数据结构时,它们将被转换为浮点数。解决方法是使用,而是将其保留为字符串。当荷兰国际集团这样的值,将编码这些数字背到大的整数: 使用此方法进行正确的数据往返很容易出错。如果属性包含,则数字字符串应保留为字符串,它将被编码为整数。 我想从服务器获取一个对象,修改一个属性,然后将整个数据结构放回去。我需要保留原始类型。除了要处理的属性外,我不想保留其他属

  • 我正在使用DSS签署Pdf文档。我需要这些文档有时间戳并启用LTV(启用PAdES LTV)。 我遇到了一些关于撤销数据的问题。 我对这个领域有点陌生,所以请容忍我。 我按照DSS本身提供的说明和演示进行操作,但没有效果。 我已经成功地使用PAdES B和PAdES T签署了Pdf,所以我的TSA服务设置正确。 我遇到的问题是,每次我尝试使用LTV签署Pdf时,都会出现以下错误:“eu.europ

  • 我有一个自定义的CMS系统,我已经写在PHP。我几乎完成了将所有旧的遗留mysql_函数转换为PDO。但是,我在一个文件中有大量的函数,没有类包装器。文件中只有大约50个函数,这实际上是运行CMS所需的所有函数。很多天前,我养成了这样使用全局值的坏习惯:

  • 寻找完全数。 思路说明 所谓完全数,从维基百科的完全数词条中得到: 完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,完全数不可能是楔形数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6,恰好等于本身。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,