XML подстрока от строкового ключа в PHP - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь перебрать строку из этой 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>

Я пробовал с разнесением и подстрокой, но он не работает Пожалуйста, помогите мне решить эту проблему

Мне нужен вывод, как это

<inputcheck>
<input>
    <paramName>rdono</paramName>
    <paramValue>121212</paramValue>
</input>
<input>
    <paramName>set</paramName>
    <paramValue>7878</paramValue>
</input>
</inputcheck>

1 Ответ

1 голос
/ 11 ноября 2019

Если вы используете правильные инструменты для обработки 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;
}

Будет выводиться:

rdono121212set7878
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...