我的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>