【问题标题】:Accessing XML attributes data访问 XML 属性数据
【发布时间】:2013-02-22 19:27:36
【问题描述】:

我有两行 XML 数据,它们是属性,但内部也包含数据,它们是重复字段。它们被存储在 SimpleXML 变量中。

<inputField Type="Name">John Doe</inputField>
<inputField Type="DateOfHire">Tomorrow</inputField>

(显然这不是真实数据,但语法实际上在我的数据中,我只是在其中使用字符串数据)

我所看到的一切都说要访问这样的数据,我已经尝试过并且效果很好。但是我的数据是动态的,所以数据并不总是在同一个地方,所以它不符合我的需求。

$xmlFile->inputField[0];
$xmlFile->inputField[1];

这工作正常,直到其中一行丢失,我可以有 0 到 5 行。所以我想知道有没有什么方法可以通过属性名称访问数据?所以可能是这样的。

$xmlFile->inputField['Name'];

$xmlFile->inputField->Name;

我将这些作为示例严格地说明我正在尝试做的事情,我知道上述代码行在语法上都不正确。

请注意,此信息是在外部生成的,因此我无法更改格式。

如果有人需要澄清,请随时告诉我,我们很乐意详细说明。

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    可能是这样的?

    echo $xmlFile->inputField->attributest()->Name;
    

    你用的是什么? DOMDocument 还是 simplexml?

    【讨论】:

    • 我为 simplexml 编写了示例。
    • 谢谢你的工作就像一个魅力,实际上我之前尝试过,但我的实时数据中有一个空格,"firstword secondword",这个空间把东西扔掉了。你知道是否有办法用引号中的空格来访问它。即"First Name" 而不仅仅是"Name"
    • @choppyfireballs 如果我理解正确,请尝试这样echo $xmlFile-&gt;inputField-&gt;attributest()-&gt;{'First Name'};
    【解决方案2】:

    你没有说,但我假设你使用的是SimpleXMLElement

    如果您想访问每个项目,只需迭代:

    foreach ($xmlFile->inputField as $inputField) { ... }
    

    如果要访问属性,请使用数组表示法:

    $inputField['Type']
    

    如果您只想访问一个特定元素,请使用 xpath:

    $xmlFile->xpath('inputField[@Type="Name"]');
    

    也许你应该通读basic examples of usage in the SimpleXMLElement documentation

    【讨论】:

    • 我正在寻找访问一个特定元素,我已经知道如何使用 foreach 和使用数组注释访问数据,在我发布问题之前,我学会了如何使用 php 的在线文档进行操作没有包含我需要的东西。因此,我尝试按照您的建议使用 xpath,并且所有 xpath 都返回给我。 array
    • xpath 返回匹配元素的数组。查看数组的第一个元素。
    • 这也很有效,太糟糕了,我不能选择两个答案。感谢您的帮助。
    【解决方案3】:

    例如你可以抓取一个数据:

    $xmlFile = simplexml_load_file($file);
    
    foreach($xmlFile->inputField as $res) {
    
        echo $res["Name"];
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多