PHP 如何查找给定节点的所有子节点


php how to find all child nodes of a given node

我的XML输入是这样的:

<Configuaration>
    <Allowances>
        <payhead>
            <code>123</code>
            <name_en>Basic</name_en>
            <source>anything</source>
        </payhead>
    </Allowances>
    <Deductions>
        <payhead>
            <code>444</code>
            <name_en>House Rent</name_en>
            <source>anything</source>
        </payhead>
    </Deductions>
</Configuaration>

我想要的是,在我的 php 函数中,我将给出 2 个参数。 第一个是输入 xml,第二个是 searchTag(此标记下的所有子节点都应返回)。

我的PHP函数:

<?php
class myXMLUtil
{
    public static function getValue($inputXML, $searchTag)
    {
        $dom = new DOMDocument;
        $dom->loadXML($inputXML);
        $childs = $dom->getElementsByTagName($searchTag);
        foreach ($childs as $child) {
            echo '<'.$child->nodeName.'>'.$child->nodeValue.'</'.$child->nodeName.'>'.PHP_EOL;
        }
    }
}
?>  

因此,如果我将the_xml_string和"payhead"作为函数参数,那么它应该返回

<payhead>  
    <code>123</code>  
    <name_en>Basic</name_en>  
    <source>anything</source>  
</payhead>  
<payhead>  
    <code>123</code>  
    <name_en>Basic</name_en>  
    <source>anything</source>  
</payhead>  

但相反,我得到了

<payhead>123Basicanything</payhead>  
<payhead>444House Rentanything</payhead>  

我不明白。有人可以帮忙吗?如果我的代码有问题,那么我该如何实现它?蒂亚。

看起来你需要这个函数:

class myXMLUtil
{
    public static function getValue($inputXML, $searchTag)
    {
        $dom = new DOMDocument;
        $dom->loadXML($inputXML);
        $foundElements = $dom->getElementsByTagName($searchTag);
        foreach ($foundElements as $foundElement) {
            echo $foundElement->ownerDocument->saveXML($foundElement);
        }
    }
}

您可以在本地运行以下代码:

<?php
$xml = <<<EOF
<Configuaration>
<Allowances>
    <payhead>
        <code>123</code>
        <name_en>Basic</name_en>
        <source>anything</source>
    </payhead>
</Allowances>
<Deductions>
    <payhead>
        <code>444</code>
        <name_en>House Rent</name_en>
        <source>anything</source>
    </payhead>
</Deductions>
</Configuaration>
EOF;
class myXMLUtil
{
    public static function getValue($inputXML, $searchTag)
    {
        $dom = new DOMDocument;
        $dom->loadXML($inputXML);
        $foundElements = $dom->getElementsByTagName($searchTag);
                foreach ($foundElements as $foundElement) {
                        echo $foundElement->ownerDocument->saveXML($foundElement);
                }
    }
}
myXMLUtil::getValue($xml, 'payhead');
?>

它会回来

<payhead>
    <code>123</code>
    <name_en>Basic</name_en>
    <source>anything</source>
</payhead><payhead>
    <code>444</code>
    <name_en>House Rent</name_en>
    <source>anything</source>
</payhead>