我正在尝试从xml替换标记。我已经通过curl在变量中存储了一个xml结果。并尝试制作file.xml。 当它
<Topics>
<Topic code="Balances" count="26" pagesize="100" />
</Topics>
使用此功能,它不会返回任何匹配项。为什么呢?
function get_tag( $tag, $xml ) {
$tag = preg_quote($tag);
preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>}',
$xml,
$matches,
PREG_PATTERN_ORDER);
return $matches[1];
}
答案 0 :(得分:3)
您的示例是解析文档的非常糟糕和缓慢的实现。建议您应该查看DOMDocument
对象并尝试实现它。
根据您的示例的基本用法:
$dom = new DOMDocument();
$dom->loadXML("<xml ... />"); // Current document
$replace = $dom->getElementsByTagName($tag);
foreach ($replace as $node)
{
$xml = $dom->createDocumentFragment();
$xml->loadXML("<xml ... />"); // XML to replace original with
$dom->replaceChild($xml, $node); // XML is your new node
}
$dom->normalize(); // Saves the changes
echo $dom->saveXML(); // Output
编辑;对不起 - 现在更好的例子。
答案 1 :(得分:0)
这是你想要的:
<?php
$xml = '
<tag1>
<tag2>
x
</tag2>
<tag3>
</tag3>
<tag2>
y
</tag2>
</tag1>
';
function get_tag($tag, $xml){
$tag = preg_quote($tag);
preg_match_all('/<'.$tag.'.*?>(.*?)<\/'.$tag.'>/s', $xml, $matches, PREG_PATTERN_ORDER);
return $matches[1];
}
print_r(get_tag('tag2', $xml));
?>
输出:
Array
(
[0] =>
x
[1] =>
y
)