PHP SimpleXML - 一行解决查找一键;在 XML 文件中找到其父级?

标签 php xml simplexml

我的目标是:首先,在 XML 文件中找到特定的键。其次,返回键的父级。在下面的代码示例中,键是文件名。

代码:

<?php
    $inputXML = simplexml_load_file("data.xml");

    $myProject = lookupProject($inputXML, "file1");
    echo $myProject->projectname; //print the name of the project containing <filename>"file1"</filename>
    echo "\n";

    /*
     Goal: return the <project> that is the parent of <filename>$input_filename</filename>
     Assume: a <filename> appears in at most one <project> subtree.
     */
    function lookupProject($myXML, $input_filename)  
    {
        foreach($myXML->project as $curr_project) //notice I don't mention the root <projects></projects>
        {
            foreach($curr_project->filename as $curr_filename)
            {
                if ($curr_filename == $input_filename) 
                {
                    return $curr_project; 
                }
            }
        }
        return null; //if not found, return null
    }  
?>

示例数据文件,data.xml

<projects>
    <project>
        <projectname>project1</projectname>
        <filename>file1</filename>
        <filename>file2</filename>
    </project>
    <project>
        <projectname>project2</projectname>
        <filename>file3</filename>
    </project>
</projects>

如果我们有一个更复杂的 XML 结构,具有许多级别的子树,则查找 file1 的父级可能需要大量的 foreach() 循环。是否有一个 SimpleXML 命令可以抽象出 LookupProject 中出现的循环?

tl;dr 有没有一个简短/优雅(一行?)的解决方案来实现lookupProject()?

请注意,这是 homework但上面的问题根本不是作业问题的症结所在。我已经完成了作业,但是知道上述问题的答案将帮助我使我的解决方案更加优雅。

最佳答案

“键”更合适的术语是“TextNode 值”。您正在寻找

在你的情况下,这个 XPath查询将给出项目名称元素

/projects/project[filename="file1"]/projectname

由于这是标记为作业,因此我将让您自行找出必要的 PHP 代码。

关于PHP SimpleXML - 一行解决查找一键;在 XML 文件中找到其父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9606655/

相关文章:

php - "simplexml_load_file"中的错误处理

php - Redhat php-apd安装

php - 响应XML包含 “2000 ”和 “20a0”字符

php - 自定义 serialize_handler 用于自定义 php SessionHandler(数据库存储)

python - 在给定标签处将 XML 文件拆分为多个

android - Xamarin Android 菜单图标不显示

php - 使用 PHP SimpleXML 重新格式化 RSS 日期字符串

php - Laravel 附加访问器意外地也添加了与响应的关系

python - 解析 <item> 标签的 XML RSS feed 字节流

php - 使用XPath提取带有子节点的完整节点