SimpleXML获取元素的原始值

时间:2016-10-06 13:30:08

标签: php xml simplexml

我有以下XML代码,我 使用SimpleXML:

<CATEGORY_TREE>/Gry&#47;Puzzle/puzzle/</CATEGORY_TREE>
<CATEGORY_NAME>/Gry&#47;Puzzle/puzzle/</CATEGORY_NAME>

$node->CATEGORY_TREE返回/Gry/Puzzle/puzzle/这是正确的。

获取原始值/Gry&#47;Puzzle/puzzle/的任何方式?

2 个答案:

答案 0 :(得分:1)

仅使用不使用基于LibXML2的XML解析器(SimpleXML,DOM,XMLReader)。它们都强制替换预定义的实体。

来自LibXML2 documentation

  

请注意,在保存时,libxml2强制执行转换   必要时预定义的实体以防止格式良好   问题,也将透明地取代有字符的那些(即   它不会在DOM树或调用中生成实体引用元素   在输入中找到它们时的reference()SAX回调。)

对于XML解析器'/'和'+'是相等的。要将实体存储在XML中,必须转义其&。如果您在DOM中将其创建为文本节点,您将看到DOM将为序列化执行此操作:

$document = new DOMDocument();
$document
  ->appendChild($document->createElement('CATEGORY_TREE'))
  ->appendChild($document->createTextNode('/Gry&#47;Puzzle/puzzle/'));
echo $document->saveXml();

输出:

<?xml version="1.0"?>
<CATEGORY_TREE>/Gry&amp;#47;Puzzle/puzzle/</CATEGORY_TREE>

答案 1 :(得分:-1)

使用html_entity_decode()函数:

<?php
echo html_entity_decode($node->CATEGORY_TREE);