Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中从xml子字符串到字符串键_Php_Xml - Fatal编程技术网

php中从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字符串中选择到 使用了分解字符串,但未得到正确的结果

<?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