我正在try 用php从关联数组创建XML.为了构建我的XML,我使用了SimpleXMLElement

我需要包含这个 struct 的文件:

<pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0">
    <pt:request_meta>
        <request_meta:service>PT0005_ACCEPTANCEXPRESS</request_meta:service>
        <request_meta:time2close unit="d" value="28"/>
        <request_meta:time2save unit="d" value="1825"/>
        <request_meta:lopd>0</request_meta:lopd>
        <request_meta:retryprotocol>3</request_meta:retryprotocol>
        <request_meta:synchronous>false</request_meta:synchronous>
        <request_meta:tsa>0</request_meta:tsa>
        <request_meta:userdefined name="LGT_SDKJava">4.13.2</request_meta:userdefined>
    </pt:request_meta>
</pt:request>

在我的SimpleXMLElement实例中,我正在执行以下操作:

new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0"><pt:request_meta></pt:request_meta></pt:request>');

我的XML创建的还可以,但是当我用notepad++ 显示它并完成XML的时候,我可以看到我的标签it‘S格式错误:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0">
    <pt:request_meta/>
    <pt:service>instalacion_id_1</pt:service>
    <pt:0>request_meta:time2close unit="d" value="28"</pt:0>
    <pt:1>request_meta:time2save unit="d" value="1825"</pt:1>
    <pt:lopd>0</pt:lopd>
    <pt:retryprotocol>3</pt:retryprotocol>
    <pt:synchronous/>
    <pt:tsa>0</pt:tsa>
    <pt:userdefined name="php">8.1.6</pt:userdefined>
</pt:request>

有人能帮我用正确的 struct 创建我的XMl吗?我不知道如何使用这些信息来做我的标签,例如:

<request_meta:time2close unit="d" value="28"/>

我的数组数据是吧?S:

$logalty_data = [
          'request_meta:service' => 'instalacion_id_'.$id,
          'request_meta:time2close unit="d" value="28"',
          'request_meta:time2save unit="d" value="1825"',
          'request_meta:lopd' => 0,
          'request_meta:retryprotocol' => 3,
          'request_meta:synchronous' => false,
          'request_meta:tsa' => 0,
          'request_meta:userdefined name="php"' => '8.1.6'
 ];

最新情况:

我已经解决了我的标签问题:<request_meta:time2close unit="d" value="28"/>

我在索引中添加了我的数组:=> "",用这种方法创建一个空标记并结束它:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0">
    <pt:request_meta/>
    <pt:service>instalacion_id_1</pt:service>
    <pt:time2close unit="d" value="28"/>
    <pt:time2save unit="d" value="1825"/>
    <pt:lopd>0</pt:lopd>
    <pt:retryprotocol>3</pt:retryprotocol>
    <pt:synchronous/>
    <pt:tsa>0</pt:tsa>
    <pt:userdefined name="php">8.1.6</pt:userdefined>
</pt:request>

但我仍然有问题的标签<pt:request_meta/>只有一个关闭标签,而不是开放标签

针对用户@mrázek-honza My XML结果:

<pt:request_meta>
    <pt:service>instalacion_id_1</pt:service>
    <pt:time2close unit="d" value="28"/>
    <pt:time2save unit="d" value="1825"/>
    <pt:lopd>0</pt:lopd>
    <pt:retryprotocol>3</pt:retryprotocol>
    <pt:synchronous/>
    <pt:tsa>0</pt:tsa>
    <pt:userdefined name="php">8.1.6</pt:userdefined>
</pt:request_meta>

我输了<?xml version="1.0" encoding="UTF-8" standalone="yes"?><pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0"></pt:request>

推荐答案

如果你想添加一些东西作为一个子元素,你必须这样做. 这会将包装元素添加为根元素的子元素,并将子元素直接添加到包装元素中.

<?php

$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0"></pt:request>');

$wrapper = $xml->addChild('pt:request_meta');

$wrapper->addChild('request_meta:service', 'instalacion_id_1', 'request_meta');
// add the rest of the data

$xml->saveXML('test.xml');

此代码段生成的输出为

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pt:request xmlns:pt="urn:logalty:schemas:core:1.0" xmlns:identity="urn:logalty:schemas:core:identity:1.0" xmlns:process_meta="urn:logalty:schemas:process:meta:1.0" xmlns:ptforms="urn:logalty:schemas:forms:1.0" xmlns:request_meta="urn:logalty:schemas:request:meta:1.0">
    <pt:request_meta>
        <request_meta:service xmlns:request_meta="request_meta">instalacion_id_1</request_meta:service>
    </pt:request_meta>
</pt:request>

Php相关问答推荐

为WooCommerce中的特定用户角色指定促销价格

模型中的Laravel自定义查询字段

msgraph-sdk-php v2如何传递skiptoken到request?

WooCommerce基于元数据的自定义范围目录排序

Php解压缩deflate64

我必须对所有的SQL查询使用预准备语句吗?

在laravel 9或10 php中向中间件响应添加自定义数据

Laravel区分大小写搜索

使用CODIGNITER3中的OR和AND子句进行查询

在php中,方法之间的属性链接是如何工作的

获取作者';在WordPress中使用PHP

显示自定义 Laravel 9 公共属性的错误

有没有办法像引用枚举一样引用注册表中的对象?

Google Drive API:为什么使用服务帐户在下载文件时会将我带到 Google Drive 登录窗口?

使用动态地址和动态文件创建zip文件并获取zip文件链接

根据所选付款方式更改 WooCommerce 提交结帐按钮文本

如何获得没有运输等级的产品

为 WordPress 页面创建新功能

Laravel 10 单元测试看不到来自 Artisan Command 的数据库更改

复杂的mysql查询问题