使用 php simplexml 显示 XML 数据

2023-12-14

我有一段 XML 如下

<records count="2">
  <record>
    <firstname>firstname</firstname>
    <middlename>middlename</middlename>
    <lastname>lastname</lastname>
    <namesuffix/>
    <address>
      <street-number>demo</street-number>
      <street-pre-direction/>
      <street-name>demo</street-name>
      <street-post-direction/>
      <street-suffix>demo</street-suffix>
      <city>demo</city>
      <state>NY</state>
      <zip>demo</zip>
      <zip4>demo</zip4>
      <county>demo</county>
    </address>
    <phonenumberdetails>
      <phonenumber>demo</phonenumber>
      <listed>demo</listed>
      <firstname>demo</firstname>
    </phonenumberdetails>
    <dob day="" month="" year=""/>
    <age/>
    <date-first month="10" year="1999"/>
    <date-last month="04" year="2011"/>
  </record>
  <record>
    <firstname>firstname</firstname>
    <middlename>middlename</middlename>
    <lastname>lastname</lastname>
    <namesuffix/>
    <address>
      <street-number>demo</street-number>
      <street-pre-direction/>
      <street-name>demo</street-name>
      <street-post-direction/>
      <street-suffix>demo</street-suffix>
      <city>demo</city>
      <state>NY</state>
      <zip>demo</zip>
      <zip4>demo</zip4>
      <county>demo</county>
    </address>
    <phonenumberdetails>
      <phonenumber>demo</phonenumber>
      <listed>demo</listed>
      <firstname>demo</firstname>
    </phonenumberdetails>
    <dob day="" month="" year=""/>
    <age/>
    <date-first month="10" year="1999"/>
    <date-last month="04" year="2011"/>
  </record>
</records>

现在,我已经能够使用 SimpleXML 获取 PHP 中除第一个日期和最后一个日期元素之外的所有数据。我一直在使用下面列出的代码

$dateFirst           = 'date-first';
$dateLast            = 'date-last';
$streetNumber        = 'street-number';
$streetPreDirection  = 'street-pre-direction';
$streetName          = 'street-name';
$streetPostDirection = 'street-post-direction';
$streetSuffix        = 'street-suffix';
$unitDesignation     = 'unit-designation';
$unitNumber          = 'unit-number';

foreach ($reportDataXmlrecords->records->record as $currentRecord) {
    echo $currentRecord->$dateFirst['month'].'/'.$currentRecord->$dateFirst['year'];
    echo $currentRecord->$dateLast['month'].'/'.$currentRecord->$dateLast['year'];
    echo $currentRecord->address->$streetNumber;
    $currentRecord->address->$streetName; // ......and so on 
}

where $reportDataXmlrecords是来自父节点的 simpleXML 对象的一部分

但是前两个回显不打印任何内容,而所有其他回显都正确打印,具体来说,我无法访问中的数据

<date-first month="10" year="1999"/>
<date-last month="04" year="2011"/>

如果我这样做的话也可以用于调试

print_r($currentRecord->$dateFirst);

它打印

SimpleXMLElement Object ( 
    [@attributes] => Array ( [month] => 10 [year] => 1999 ) 
)

任何帮助将不胜感激。谢谢。


你的问题是当你这样做的时候

$currentRecord->$dateFirst['month']

PHP首先会评估$dateFirst['month']在尝试将其用作财产之前作为一个整体

$dateFirst = 'date-first';
var_dump( $dateFirst['month'] ); // gives "d"

because 可以通过数组表示法的偏移量来访问字符串,但非整数偏移量会转换为整数,并且因为将 'month' 转换为整数为 0,所以您正在尝试执行以下操作$currentRecord->d:

$xml = <<< XML
<record>
    <date-first month="jan"/>
    <d>foo</d>
</record>
XML;

$record = simplexml_load_string($xml);
$var    = 'date-first';
echo $record->$var['month']; // foo

您可以使用大括号访问连字符的属性:

$record->{'date-first'}['month'] // jan

顺便说一句,当您的问题中显示的 XML 实际上是您使用 SimpleXml 加载的 XML 时,例如什么时候<records>是根节点,那么做

$reportDataXmlrecords->records->record

无法工作,因为$reportDataXmlrecords已经是根节点,你必须省略->records如果你想迭代其中的记录元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 php simplexml 显示 XML 数据 的相关文章

  • 在 PHP 中使用 Curl 将获取字段附加到 URL

    我可以使用 Curl 执行服务器端和客户端重定向 但无法通过 get 请求将 GET 字段附加到 URL 这是我的代码 post curl init curl setopt post CURLOPT URL url curl setopt
  • 替换多余的空格

    我需要从应用程序中的玩家用户名中删除多余的空格 字母之间不止一次空格 并将其替换为单个空格 我不介意用户有一个空格 但我需要删除彼此相邻的多个空格 目前我是这样实现的 replace array array fill array array
  • “空合并”(??) 运算符的用途是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 随着新的 PHP 版本 PHP 7 的发布 引入了新功能 这些新功能中有一个我不熟悉的操作符 这Nul
  • 使用 TSQL 选择 XML 节点

    我的 SQL Server 2008 数据库表有一个 XML 字段 我想从该字段以及其他字段中选择节点 例如 考虑下表 DECLARE TestTable AS TABLE Id VARCHAR 20 Name XML INSERT INT
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • PHP 计算字符串出现次数的最快方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 字符串 S 的前缀是 S 的任何前导连续部分 例如 c 和 cod 是字符串 codility 的前缀 为简单起见 我们要求前缀非空 字符串 S
  • 创建一个基于简单文本文件的搜索引擎

    我需要尽快创建一个基于简单文本文件的搜索引擎 使用 PHP 基本上它必须读取目录中的文件 删除停止词和无用词 为每个剩余的有用词及其在每个文档中出现的次数建立索引 我猜这个的伪代码是 for each file in directory r
  • 无法使用 php 将大文件上传到服务器

    我无法将大文件加载到服务器 问题出在该文件中 FILES filename tmp name 如果文件稍大于 2mb 则为空 我尝试更改 php ini 中的变量 upload max filesize 700M post max size
  • 检查用户是否连接到 Facebook,然后检查他是否喜欢某个页面

    有没有什么方法可以检查用户是否在我的外部页面上连接到 Facebook 而不让他们允许我的应用程序之一 同样的问题也适用于 检查用户是否喜欢某个页面 我检查了大约 20 个问题和 3 4 个教程 似乎所有问题都在讨论内部脚本 粉丝页面 应用
  • 当控制器类扩展父控制器时,为什么我们仍然需要父构造函数?

    我是 CodeIgniter 和 OOP 的初学者 我正在读一页 CI 教程here http ellislab com codeigniter user guide tutorial news section html 我发现了一些让我产
  • 如何使用具有比较标准的 findBy 方法

    我需要使用使用比较标准 不仅仅是精确标准 的 神奇查找器 findBy 方法 换句话说 我需要做这样的事情 result purchases repository gt findBy array prize gt gt 200 这样我就可以
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • 如何在 Java 中根据 XSD 1.1 验证 XML?

    在 Java 中根据 XML Schema 1 1 验证 XML 文件的最佳方法是什么 我从中获取了代码tutorial http www ibm com developerworks xml library x javaxmlvalida
  • CodeIgniter PHP 模型访问“无法找到您指定的模型”

    我一直在尝试为我正在构建的这个网站加载一些模型 但不知道什么原因 会带来如下错误 An Error Was Encountered Unable to locate the model you have specified logon mo
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • 提交前验证表单(比检查空字段更复杂)

    我有一个包含时间输入的表单 具体来说 开放时间和结束时间 当按下提交按钮时 它会转到一个 php 页面 其中这些输入将添加到数据库中 在允许提交表单之前我想检查一些事情 例如 我想确保开始时间早于 小于 结束时间 这是表格 Opens
  • 对文本变量进行数学求和? (例如 5865/100 )

    我有一个变量是 whatever 5865 100 这是一个文本变量 我希望它计算 5865 100 以便我可以将其添加到其他数字并进行计算 Number format 不起作用 因为它只返回 5 865 而我希望它返回 58 65 我可以
  • 未找到 mysqli 类

    我用过mysqli连接到我的应用程序中的数据库 几天前一直运行良好 突然出现以下错误 致命错误 找不到类 mysqli 我用来连接数据库的行是 link new mysqli localhost uname password scripts
  • 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

    我正在这样做 students Student find gt all return this gt render process array students gt students 然后在视图中 foreach students as

随机推荐

  • 设置 WPF 用户控件图标时无法识别 URI 前缀错误

    我正在创建一个 WPF 窗口并在其中加载用户控件 如下所示 Uri uri new Uri Views ApplicationInfo xaml UriKind RelativeOrAbsolute UserControl versionI
  • 通过搜索嵌套对象属性来过滤对象数组

    我有一个对象数组 我想通过将嵌套属性与搜索词进行比较来过滤它们 例如 var array category Business users name Sally tags tag accounting tag marketing name B
  • R 闪亮仪表板中标题中的主页按钮

    我试图在我的 Shiny 应用程序的标题中添加一个主页按钮 以便每当有人从任何选项卡单击它时 它都会重定向到第一页 目前 我在每个选项卡中使用一个actionButton 和observeEvent 返回第一页 我无法在 Shiny 应用程
  • 对同一行的并发更新

    我试图弄清楚如果我同时从不同的客户端发出以下两个查询 MySQL InnoDB 中应该发生什么 UPDATE tbl SET a a 1 WHERE id 123 UPDATE tbl SET b b 1 WHERE id 123 如果查询
  • Directx 的变化

    我的 win8 和 directx 库有问题 我有 directx jun 2010 我添加了它的 d3dx11 lib 和 h 文件 但它不起作用并说找不到库 我发现下面的 hte 链接说您可以使用 win8 sdk 而不是 direct
  • Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间来调试

    我已从 qt project 下载页面下载并安装了适用于 Windows 32 位 MinGW 4 8 的 Qt 5 1 0 我已经运行了安装程序 并且能够使用这些库和 minGW 4 8 32 位工具链来编译和运行应用程序 但是 我有一个
  • 为什么文件被放置在“C:\Users\<用户名>AppData\Local\VirtualStore\Program Files(x86)”中?

    我最近更新了我的视觉基本6 0应用程序 现在包含一个 exe manifest 文件以防止UAC虚拟化 应用此更新后 一些用户找不到他们的数据文件 AccessMDB 文件 经过系统搜索后 他们最终在C Users
  • 使用指针 C++ 实现双向链表

    我目前正在自学 C 并尝试使用部分完成的指针在 C 中实现双向链表 我知道代码当前无法处理悬空节点或输出错误 接下来我将实现这两 者 但是 代码至少应该能够构造一个列表对象并向其中添加元素 目前 当我尝试调用列表的构造函数时 出现错误 该错
  • 更新slot vuejs中的数据

    你好 我在 laravel 项目中使用 vuejs 这是我的 vuejs 代码 Vue component search and select template div div
  • 即使导出后,process.env 变量也未定义

    我正在编写一个 Node js Express 应用程序 并希望使用环境变量来设置服务器应运行的端口 但是 我似乎无法得到process env PORT阅读我的PORT环境变量 我已经使用定义了 PORT 环境变量export像这样 ex
  • 如何使用 Maven 插件从带有注释的现有实体生成 DDL?

    我有 Maven 项目 我想从现有实体生成 DDL 我怎样才能做到这一点 有没有可以生成 DDL 的 Maven 插件 我正在使用JPA 打开jpa openjpa maven plugin 插件提供了一个目标sql 使用此目标 可以从现有
  • 禁用 Windows 窗体上的所有事件

    有没有办法暂时禁用 Windows 窗体上的所有事件 我遇到的情况是 辅助线程上的处理被主线程上的事件破坏 主线程事件正在修改数据绑定到辅助线程使用的变量的控件的内容 寻找一种方法来 锁定 表单 直到辅助线程上的处理完成 显然 将处理移至主
  • 非规格化向量

    如何对已标准化的向量进行反标准化以获得标准化之前的原始值 例如 vec 0 5 1 0 0 0 vec length sqrt vec x 2 vec y 2 vec z 2 vec normalized vec x vec length
  • Visual Studio 设计时属性 - 表单列表下拉菜单

    编辑 需要明确的是 我知道如何通过反射获取表单列表 我更关心设计时属性网格 我有一个具有 Form 类型公共属性的用户控件 我希望能够在设计时从下拉列表中选择一个表单 我想从一组命名空间填充表单下拉列表 UI Foo Forms 如果您拥有
  • 如何从 Web 扩展弹出 JavaScript 中知道浏览器是 Chrome 还是 Firefox?

    我正在使用chromeChrome 和 Firefox 的命名空间 但想知道哪个浏览器正在运行网络扩展 扩展资源的链接在 Chrome 和 Firefox 中具有不同的方案 const isFirefox chrome runtime ge
  • 使用 float 格式说明符打印 int 变量

    int main int a 5 float b 7 5 printf d f n a b printf d f n a a return 0 当我在 gcc 编译器中编译它时 输出是 5 7 500000 5 7 500000 但是在 V
  • SQL Server中for循环的语法

    a 的语法是什么forSQL 中的循环 没有 for 循环 只有 while 循环 DECLARE i int 0 WHILE i lt 20 BEGIN SET i i 1 do some work END
  • HuggingFace 评估微调的零样本模型

    我正在微调 HuggingFacefacebook bart large mnli为了满足我的需要 我使用以下参数 training args TrainingArguments output dir model directory out
  • 使用深色透明度使标题栏和视图控制器无缝连接

    您好 我一直在互联网上查找并找到了有关此主题的各种有用信息 但似乎没有一个有效 if trying to get something like this 标题栏和窗口其余部分混合的地方 从互联网上得到的代码 iv 到目前为止在我的 view
  • 使用 php simplexml 显示 XML 数据

    我有一段 XML 如下