【问题标题】:How to remove namespace with PHP SimpleXMLElement?如何使用 PHP SimpleXMLElement 删除命名空间?
【发布时间】:2021-01-29 15:32:02
【问题描述】:

我的 XML 结构需要看起来像这样才能工作:

<yq1:ZwsCreateInfoRec xmlns:yq1="urn:test-com:document:test:soap:functions:mc-style">
      <ItPrice>1337</ItPrices>
</yq1:ZwsCreateInfoRec>

为了尝试实现这一点,我正在使用这样的 SimpleXMLElement:

$xml = SimpleXMLElement('<yq1:ZwsCreteMaterialFrRef xmlns:yq1="urn:test-com:document:test:soap:functions:mc-style"></yq1:ZwsCreteMaterialFrRef>');
$xml->addChild('ItPrice', '1337');

当我现在运行 $xml-&gt;asXML() 时,它会显示这个(注意 ItPrice 节点上的命名空间):

<yq1:ZwsCreateInfoRec xmlns:yq1="urn:test-com:document:test:soap:functions:mc-style">
      <yq1:ItPrice>1337</yq1:ItPrices>
</yq1:ZwsCreateInfoRec>

由于某种原因,如果我在子节点上有这样的命名空间,WebService 将无法工作,但如果我删除它们,它就可以工作。有没有办法让我删除它,还是我必须将它作为字符串循环并手动删除它们?

谢谢

【问题讨论】:

    标签: php simplexml


    【解决方案1】:

    您可以将第三个参数与空白值一起用于 addChild 方法。 $xml-&gt;addChild('ItPrice', '1337', '');

    $xml = new SimpleXMLElement('<yq1:ZwsCreteMaterialFrRef xmlns:yq1="urn:test-com:document:test:soap:functions:mc-style"></yq1:ZwsCreteMaterialFrRef>');
    $namespaces = $xml->getDocNamespaces();
    $xml->addChild('ItPrice', '1337', '');
    echo  $xml->asXml();
    

    【讨论】:

    • 这会添加一个类似&lt;ItPrice xmlns=""&gt;1337&lt;/itPrice&gt; 的标签,它与&lt;ItPrice&gt;1337&lt;/ItPrice&gt; 的接缝相同。对吗?
    • ` 1337` 它将删除 yq1 命名空间
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2010-11-17
    • 2012-10-03
    • 1970-01-01
    • 2014-12-11
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多