【问题标题】:Character $ from XML content is interpreted as a PHP variableXML 内容中的字符 $ 被解释为 PHP 变量
【发布时间】:2014-03-07 15:26:30
【问题描述】:

我有一个作为 SOAP 信封的 XML 文件列表,我需要从中提取信息,但是每当我遇到具有字符 $ 的值时,php 都会认为它是一个变量并给出错误。

查看这个 example.php 文件中的 Item 标签:

<?php
$xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:ChangeRequestPrintService="http://bt2ws.central.sun.com:8088/services/schemas/cr-print">
<SOAP-ENV:Header/><SOAP-ENV:Body>
    <ChangeRequestPrintService:PrintChangeRequest>
        <ChangeRequest>
            <Id>1-CKWF3T</Id>
            <Priority>1-Very High</Priority>
            <Type>Defect</Type>
            <Number>7077438</Number>
            <SubmittedDate>2011-08-10 19:28:01 GMT+00:00</SubmittedDate>
            <Status>3-Accepted</Status>
            <CrNumber>7077438</CrNumber>
            <Area>Defect</Area>
            <Item> Testng text $c </Item>
        </ChangeRequest>
    </ChangeRequestPrintService:PrintChangeRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML;
?>

在我正在执行的主 PHP 文件中,我有:

$bugXML=new SimpleXMLElement($xmlstr);

我得到的错误信息是:

Notice: Undefined variable: c in /path_to_file on line 20.

有什么方法可以让 PHP 忽略它吗? 我无法更改 SOAP 信封的内容。

提前致谢。

克里斯蒂娜

【问题讨论】:

    标签: php xml soap


    【解决方案1】:

    您可以执行以下操作之一:

    • 转义美元符号:Testng text \$c

    • 使用Nowdoc syntax 完全禁用变量插值。这仅适用于 PHP 5.3+。 $xmlstr = &lt;&lt;&lt;'XML'(注意撇号)。

    • 将 XML 存储在外部文件(而不是 PHP 字符串文字)中,然后需要 load it

    【讨论】:

    • 是的 \$c 是要走的路。它不会改变内容,只是 PHP 如何解析heredoc
    • 所以如果我在另一个文件(一个 XML 文件)中有 XML 内容,我应该如何打开它。什么相当于我在这里所做的? :包括'example.php'; $bugXML=new SimpleXMLElement($xmlstr);
    • @Cristina:与上面的代码等效的是:$xmlstr = file_get_contents(dirname(__FILE__).'/soap-envelope.xml');,假设您将 XML 保存在一个名为 soap-envelope.xml 的文件中,该文件与加载它的 PHP 脚本位于同一目录中。您提供的代码将 XML 作为字符串,而不是作为 DOM 或 SimpleXML。
    • @Cristina:当然,你也可以马上load it as SimpleXML from a file$xmltree = simplexml_load_file(dirname(__FILE__).'/soap-envelope.xml');
    • 太棒了,亚历克斯!非常感谢!我刚刚尝试过,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2013-08-13
    • 2016-05-05
    相关资源
    最近更新 更多