php Получить из файла xml, имеющего равные значения - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь восстановить только некоторые значения из файла xlsx. Файл, который создает проблемы для меня, это рабочие листы / листы 1. xml, структура которых ...

<sheetData>
    <row (attribbutes)>
        <c (attributes)>
            <v>value</v>
        </c>    
        .....
        <c (attributes)>
            <v>value</v>
        </c>
    </row>
    ......      
    <row (attribbutes)>
        <c (attributes)>
            <v>value</v>
        </c>    
        .....
        <c (attributes)>
            <v>value</v>
        </c>
    </row>
</sheetData>

Моя проблема в том, что значения, которые меня интересуют, находятся в разных строках, но они могут быть одни и те же. Например: мне нужен номер дня месяца (например, 16), но этот номер также является указателем, который позволяет мне найти имя коллеги, и когда я читаю атрибуты строки, я не вижу, что Я жду. Ниже приведен код, который я использую

$sheet1 = 'sheet1.xml';
$getrow = file_get_contents($sheet1);
$xmlrow   = simplexml_load_string($getrow);
foreach ($xmlrow->sheetData->row as $row_0) {
    foreach ($row_0->c as $c_0) 
    {
        foreach ($c_0->v as $v) 
        {
            if ($v[0] == $preserve) /****** This changes when search for number day of the month (if $v == $day)
            {    
                $attr_0 = $c_0->attributes();
                $row = $attr_0['r'];
                break 3;
            }
        }
    }
}

Как я могу получить правильное значение в правильной строке?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Проблема решена. В приведенном выше коде $row = $attr_0['r']; $ row становится массивом $ row [] и анализирует его. Спасибо Найджелу Рену за вдохновение

0 голосов
/ 29 февраля 2020

Вместо того, чтобы сканировать всю структуру, вы можете использовать XPath, чтобы найти его для вас. Этот код ищет элемент <c> со значением (<v> элемент), равным значению, которое вы ищете.

Поскольку xpath() возвращает массив совпадений, это означает, что вам нужно использовать $cell[0], добавление к ['r'] даст вам атрибут.

$getrow = file_get_contents($sheet1);
$xmlrow   = simplexml_load_string($getrow);

$cell = $xmlrow->xpath('//c[v="'.$preserve.'"]');

echo $cell[0]['r'];

Тестовый файл ...

<sheetData>
    <row r="4" customFormat="false" ht="12.75" hidden="false"
        customHeight="true" outlineLevel="0" collapsed="false">
        <c r="A4" s="12" />
        <c r="B4" s="13" t="n">
            <v>1</v>
        </c>
        <c r="C4" s="13" t="n">
            <v>2</v>
        </c>
        <c r="D4" s="13" t="n">
            <v>3</v>
        </c>
        <c r="E4" s="13" t="n">
            <v>4</v>
        </c>
        <c r="F4" s="14" t="n">
            <v>5</v>
        </c>
        <c r="G4" s="13" t="n">
            <v>6</v>
        </c>
        ....
    </row>
</sheetData>

и использование следующего ...

$preserve = 2;

дает мне

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