如何将PHP变量传入XML自闭合标签的属性中?
解决XML自闭合标签属性传入PHP变量的问题
这事儿我之前写PHP生成XML的时候也碰到过,给你分享几个简单好用的实现方式:
方法1:直接字符串拼接(最简便)
和你处理<County>标签的思路完全一致,把自闭合标签里的属性值直接替换成PHP变量的拼接即可,注意引号的嵌套就好:
<?php $Code = "GR"; $Country = "CountryName"; $xmlFragment = '<Address FormattedInd="true"> <CityName>Athens Center</CityName> <County>'.$Country.'</County> <CountryName Code="'.$Code.'" /> </Address>'; // 输出或者使用这个XML片段 echo $xmlFragment; ?>
这里把原来的Code="GR"改成Code="'.$Code.'",和<County>的变量拼接逻辑一样,PHP会自动把变量值插入到对应的位置。
方法2:使用HEREDOC语法(更易读)
如果XML片段比较长,频繁的字符串拼接会显得很乱,用PHP的HEREDOC可以直接在XML里嵌入变量,不用额外拼接:
<?php $Code = "GR"; $Country = "CountryName"; $xmlFragment = <<<XML <Address FormattedInd="true"> <CityName>Athens Center</CityName> <County>$Country</County> <CountryName Code="$Code" /> </Address> XML; echo $xmlFragment; ?>
HEREDOC的语法是用<<<标识符开头,然后写内容,最后用相同的标识符结尾(注意结尾的标识符必须单独一行,不能有空格),里面的变量可以直接使用,非常适合编写结构化的XML/HTML内容。
方法3:用DOMDocument生成(最规范)
如果你的XML结构复杂,或者需要动态生成大量节点/属性,推荐用PHP内置的DOMDocument类来构建,这样能避免手动拼接字符串可能出现的语法错误,还能自动处理编码和格式:
<?php $Code = "GR"; $Country = "CountryName"; // 初始化DOM文档 $dom = new DOMDocument('1.0', 'UTF-8'); $dom->formatOutput = true; // 格式化输出,方便阅读 // 创建Address节点并设置属性 $addressNode = $dom->createElement('Address'); $addressNode->setAttribute('FormattedInd', 'true'); $dom->appendChild($addressNode); // 添加CityName节点 $cityNode = $dom->createElement('CityName', 'Athens Center'); $addressNode->appendChild($cityNode); // 添加County节点 $countyNode = $dom->createElement('County', $Country); $addressNode->appendChild($countyNode); // 添加CountryName节点并设置Code属性 $countryNameNode = $dom->createElement('CountryName'); $countryNameNode->setAttribute('Code', $Code); $addressNode->appendChild($countryNameNode); // 输出XML echo $dom->saveXML(); ?>
这种方式虽然代码量稍大,但扩展性和可维护性都很强,后续如果要修改XML结构,直接操作节点和属性就行,不容易出错。
内容的提问来源于stack exchange,提问作者Abdul Rahman
相关产品推荐
相关产品推荐

