0

我有一个问题,我需要使用 php 编辑一个 xml 文件,基于它已传递的字符串变量。

即,我的 php 有一个字符串变量,其值为“true”或“false”,我需要更改以下 xml 文件代码:

<Parameter>             
     <ParameterName>Method1</ParameterName>                  
     <ParameterDescription>description</ParameterDescription>
     <ParameterValue type="bool">false</ParameterValue>
</Parameter>

<Parameter> 
     <ParameterName>Method2</ParameterName>       
     <ParameterDescription>description</ParameterDescription> 
     <ParameterValue type="bool">true</ParameterValue>
</Parameter> 

<Parameter>
     <ParameterName>Method3</ParameterName>
     <ParameterDescription>description</ParameterDescription>
     <ParameterValue type="float">0.025</ParameterValue> 
</Parameter>

这样第一个“ParameterValue”就会从默认的“false”变为变量的值(注意 php 中的变量是字符串,而 xml 中的变量是布尔类型)。我查看了涉及 awk、sen 和 dom 的建议,但运气不佳。我希望有一种最简单的方法来更改 XML 中的这个单词!

詹姆士

4

4 回答 4

0

你见过 Domdocument 类吗?http://www.php.net/manual/es/class.domdocument.php这个类,你可以编辑你的 XML

于 2012-08-03T12:53:23.130 回答
0

你把事情弄得太复杂了。XML 只是一个具有一些格式化要求的字符串(文本文件)。只需像创建其他字符串一样创建字符串,但请记住这些格式规则。

这应该可以在 PHP 中解决问题。

$xml = <<<EOT
<Parameter>              
     <ParameterName>Method1</ParameterName>                   
     <ParameterDescription>description</ParameterDescription>
EOT

$xml .= '     <ParameterValue type="bool">' . $var . "false</ParameterValue>\n";
$xml .= <<<EOT;
</Parameter> 

<Parameter>  
     <ParameterName>Method2</ParameterName>        
     <ParameterDescription>description</ParameterDescription>  
     <ParameterValue type="bool">true</ParameterValue> 
</Parameter>  

<Parameter> 
     <ParameterName>Method3</ParameterName> 
     <ParameterDescription>description</ParameterDescription> 
     <ParameterValue type="float">0.025</ParameterValue>  
</Parameter> 
EOT;

然后,您可以将字符串保存到文件(添加其他所需的 XML 内容!),将其打印到 STDOUT 或将其加载到 DOMDocument 以进行进一步处理。你的选择。

于 2012-08-03T12:55:33.193 回答
0

如果不是真的有必要,我建议不要在 php 中使用 dom...

例如,从头开始编写文档可以在没有 dom 的情况下完成。

即使你不使用Dom php,也要小心编码,如果你需要在with dom之后使用生成的文件......然后放置适当的xml头......(没有它真的是@*!§&)

于 2012-08-03T12:59:25.753 回答
0

php 中有多个 xml 库,包括simplexmlDom。对于选择节点,这两个库都支持 xpath,这是一个强大的工具。使用 Dom,这看起来像这样:

$the_variable = true;
$xml = simplexml_load_string($xml);
$elements = $xml->xpath('//Parameter/ParameterValue[text()="false"]'); // select paramter/parameterValue nodes where the text content is "false"
foreach ($elements as $elem) {
    $elem[0] = $the_variable; // will output "<ParameterValue>1</ParameterValue>"
    // $elem[0] = var_export($the_variable, true); // will output "<ParameterValue>true</ParameterValue>"
}   

print $xml->saveXML();
于 2012-08-03T13:05:13.620 回答