选择xml文件中attribute = value的父节点的所有子节点


Select All child node of a parent nod where attribute = value in a xml file

我需要下面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>
我真的被困在这里了,请任何人给我举个例子。

好了:

$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));