php中从xml子字符串到字符串键
我正在尝试从这个XML字符串中选择到 使用了分解字符串,但未得到正确的结果php中从xml子字符串到字符串键,php,xml,Php,Xml,我正在尝试从这个XML字符串中选择到 使用了分解字符串,但未得到正确的结果 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Response> <responseCode>000</responseCode> <inputcheck> <input> <paramName>rdono</paramNa
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Response>
<responseCode>000</responseCode>
<inputcheck>
<input>
<paramName>rdono</paramName>
<paramValue>121212</paramValue>
</input>
<input>
<paramName>set</paramName>
<paramValue>7878</paramValue>
</input>
</inputcheck>
<responserst>
<optionst>
<option>
<amountName>Early</amountName>
<amountValue>34000</amountValue>
</option>
<option>
<amountName>Late</amountName>
<amountValue>35000</amountValue>
</option>
</optionst>
<valuno>35000</valuno>
<valunodate>2019-10-15</valunodate>
</responserst>
<additionalInfo>
<info>
<infoName>PC</infoName>
<infoValue>5</infoValue>
</info>
<info>
<infoName>Disconn Tag</infoName>
<infoValue>0</infoValue>
</info>
</additionalInfo>
</Response>
000
阿多诺
121212
设置
7878
早期的
34000
晚的
35000
35000
2019-10-15
个人计算机
5.
DISCON标签
0
我试过使用explode和substring,但它不起作用
请帮我解决这个问题
我需要这样的输出
<inputcheck>
<input>
<paramName>rdono</paramName>
<paramValue>121212</paramValue>
</input>
<input>
<paramName>set</paramName>
<paramValue>7878</paramValue>
</input>
</inputcheck>
阿多诺
121212
设置
7878
如果使用正确的工具处理XML,您会发现任务非常简单。将XML字符串加载到DOMDocument
中,然后创建一个XPath处理器(DOMXPath
),以便可以对DOM运行查询。或者,您可以放弃XPath处理器,使用parent
和sibling
选择器,但这会变得更复杂一些
$xml='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Response>
<responseCode>000</responseCode>
<inputcheck>
<input>
<paramName>rdono</paramName>
<paramValue>121212</paramValue>
</input>
<input>
<paramName>set</paramName>
<paramValue>7878</paramValue>
</input>
</inputcheck>
<responserst>
<optionst>
<option>
<amountName>Early</amountName>
<amountValue>34000</amountValue>
</option>
<option>
<amountName>Late</amountName>
<amountValue>35000</amountValue>
</option>
</optionst>
<valuno>35000</valuno>
<valunodate>2019-10-15</valunodate>
</responserst>
<additionalInfo>
<info>
<infoName>PC</infoName>
<infoValue>5</infoValue>
</info>
<info>
<infoName>Disconn Tag</infoName>
<infoValue>0</infoValue>
</info>
</additionalInfo>
</Response>';
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->recover=true;
$dom->strictErrorChecking=false;
$dom->loadXML( $xml );
$errors = libxml_get_errors();
libxml_clear_errors();
$xp=new DOMXPath( $dom );
$col=$xp->query( '//inputcheck/input' );
function nodevalue( $tag, $parent ){# helper
global $xp;
return $xp->query( $tag, $parent )->item( 0 )->textContent;
}
foreach( $col as $node ){
$name=nodevalue( 'paramName', $node );
$value=nodevalue( 'paramValue', $node );
echo $name, $value;
}
请把你遇到的问题贴出来,尽管这是一件非常奇怪(而且几乎肯定是坏事)的事情。您试图实现什么?您的预期输出是什么,为什么不使用XML工具而不是字符串操作?请查看
DOMDocument
和DOMXPath
-您可以使用它们非常轻松地解决问题。您可以用$name=$xp->evaluate('string>替换nodevalue()
调用(paramName)'$node);$value=$xp->evaluate('string(paramValue)'$node);
。如果这里没有匹配的节点,它将返回一个空字符串。
rdono121212set7878