【问题标题】:Select All child node of a parent nod where attribute = value in a xml file [duplicate]选择xml文件中属性=值的父节点的所有子节点[重复]
【发布时间】:2013-04-18 22:50:49
【问题描述】:

我需要以下 xml 搜索的帮助。我无法弄清楚如何从按属性搜索的 xml 文件中搜索所有子节点。 详情如下。

这是我的 XML 文件

<?xml version="1.0"?>
<systemConfigs>
    <systemConfig cnfId="1">
        <moduleName>Module 1</moduleName>
        <channeles ch="1">
            <channelName>Channel 1 of Module 1</channelName>
            <channelType>myFunc 1</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 1</eu>
            <custScale>myFunc 1</custScale>
            <rawMin>myFunc 1</rawMin>
            <rawMax>myFunc 1</rawMax>
        </channeles>
        <channeles ch="2">
            <channelName>Channel 2 of Module 1</channelName>
            <channelType>myFunc 2</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 2</eu>
            <custScale>myFunc 2</custScale>
            <rawMin>myFunc 2</rawMin>
            <rawMax>myFunc 2</rawMax>
        </channeles>
    </systemConfig>
    <systemConfig cnfId="2">
        <moduleName>Module 2</moduleName>
    <channeles ch="3">
        <channelName>Channel 1 of Module 2</channelName>
            <channelType>myFunc 1</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 1</eu>
            <custScale>myFunc 1</custScale>
            <rawMin>myFunc 1</rawMin>
            <rawMax>myFunc 1</rawMax>
        </channeles>
        <channeles ch="4">
            <channelName>Channel 2 of Module 2</channelName>
            <channelType>myFunc 2</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 2</eu>
            <custScale>myFunc 2</custScale>
            <rawMin>myFunc 2</rawMin>
            <rawMax>myFunc 2</rawMax>
    </channeles>
    </systemConfig>
    <systemConfig cnfId="3">
        <moduleName>NI DAQmx Task</moduleName>
        <channeles ch="5">
            <channelName>my Voltage</channelName>
            <channelFunc>conFig</channelFunc>
            <channelType>thermo</channelType>
            <eu>EF</eu>
            <custScale>custPol</custScale>
            <rawMin>1</rawMin>
            <rawMax>10</rawMax>
            </channeles>
    </systemConfig>
</systemConfigs>

示例: 我需要通过属性 ch=4 从上述 xml 中搜索所有数据 我该怎么做?

<channeles ch="4">
    <channelName>Channel 2 of Module 2</channelName>
    <channelType>myFunc 2</channelType>
    <channelFunc>conFig</channelFunc>
    <eu>myFunc 2</eu>
    <custScale>myFunc 2</custScale>
    <rawMin>myFunc 2</rawMin>
    <rawMax>myFunc 2</rawMax>
</channeles>

我真的卡在这里,请任何人帮我举个例子。 提前致谢。

【问题讨论】:

  • 你知道我们已经在这个网站上回答了这个问题吗?

标签: php xml


【解决方案1】:

你去吧:

$xml = '<?xml version="1.0"?>
<systemConfigs>
    <systemConfig cnfId="1">
        <moduleName>Module 1</moduleName>
            <channeles ch="1">
                <channelName>Channel 1 of Module 1</channelName>
                <channelType>myFunc 1</channelType>
                <channelFunc>conFig</channelFunc>
                <eu>myFunc 1</eu>
                <custScale>myFunc 1</custScale>
                <rawMin>myFunc 1</rawMin>
                <rawMax>myFunc 1</rawMax>
            </channeles>
            <channeles ch="2">
                <channelName>Channel 2 of Module 1</channelName>
                <channelType>myFunc 2</channelType>
                <channelFunc>conFig</channelFunc>
                <eu>myFunc 2</eu>
                <custScale>myFunc 2</custScale>
                <rawMin>myFunc 2</rawMin>
                <rawMax>myFunc 2</rawMax>
            </channeles>
        </systemConfig>
    <systemConfig cnfId="2">
        <moduleName>Module 2</moduleName>
    <channeles ch="3">
        <channelName>Channel 1 of Module 2</channelName>
            <channelType>myFunc 1</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 1</eu>
            <custScale>myFunc 1</custScale>
            <rawMin>myFunc 1</rawMin>
            <rawMax>myFunc 1</rawMax>
        </channeles>
        <channeles ch="4">
            <channelName>Channel 2 of Module 2</channelName>
            <channelType>myFunc 2</channelType>
            <channelFunc>conFig</channelFunc>
            <eu>myFunc 2</eu>
            <custScale>myFunc 2</custScale>
            <rawMin>myFunc 2</rawMin>
            <rawMax>myFunc 2</rawMax>
    </channeles>
    </systemConfig>
    <systemConfig cnfId="3">
        <moduleName>NI DAQmx Task</moduleName>
        <channeles ch="5">
            <channelName>my Voltage</channelName>
            <channelFunc>conFig</channelFunc>
            <channelType>thermo</channelType>
            <eu>EF</eu>
            <custScale>custPol</custScale>
            <rawMin>1</rawMin>
            <rawMax>10</rawMax>
            </channeles>
    </systemConfig>
</systemConfigs>';

$doc = new DOMDocument();

 $doc->loadXML($xml);

$selector = new DOMXPath($doc);
$list = $selector->query('//channeles[@ch="4"]');
$node = $list->item(0);

echo($doc->saveXML($node));

【讨论】:

  • 请不要重复答案。而只是简历或留下链接。
  • mmm - 它是如何重复的答案?我怎么知道?
  • 重复的答案是已经给出的答案(在您的情况下:通过执行检查属性值的 xpath 查询来检索节点)。你可以通过搜索网站来判断。这里问的话题相对来说是微不足道的,所以你可以假设这个问题之前已经被问过并得到了回答。因此,您搜索答案(这对您来说很容易,因为您已经有了如何回答它的概念,例如,您在搜索中添加 xpath)。然后你找到答案,然后你链接它。
  • 谢谢阿迪迪,它对我有帮助,我需要更多帮助。请让我知道如何获取数组或变量中的所有节点值(搜索后) 示例:foreach($node as $n) { $cName = $doc->getElementsByTagName( "channelName" ); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多