#php #xml
#php #xml
Вопрос:
Всем доброго утра!
Я нахожусь в процессе работы над PHP-скриптом, который позволит пользователю выбрать текстовый файл, который соответствует приведенному ниже формату, и преобразовать его в XML-файл.
Текстовый файл
Barcode: 9091
Update Bib Status: Unable to update bib record: item barcode not found.
Update Holding Status: Unable to update holdings record: item barcode not found.
Update Item Status: Unable to update item record: item barcode not found.
Item ID: int
Barcode: int
Title: some stuff
Enum/Chron:
Call Number: alphanumeric stuff
Call Number Prefix:
Holding Location: some stuff
Permanent Location: some stuff
Temporary Location: some stuff
Permanent Type: some stuff
Temporary Type:
Media Type:
Item Status: Not Charged
Statistical Categories:
Magnetic Media: No
Sensitize: Yes
Я хотел бы взять информацию в левом столбце и использовать их как элементы XML, а элементы в правом столбце — как содержимое. Soo …. результатом, которого я хотел бы достичь после запуска скрипта, будет XML-файл, подобный этому:
<item>
<barcode>9091</barcode>
<ItemID>1234</ItemID>
<title>In the heart of the Sea</title>
....
</item>
Я могу загрузить файл, однако я застрял при создании нужных элементов.
То, что у меня есть до сих пор, приведено ниже:
Текущий код PHP
if(isset($_POST["submit"])){
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["scans"]["name"]); //retain file after upload
$uploadOk=1;
move_uploaded_file($_FILES["scans"]["tmp_name"], $target_file);
echo "Your file has been successfully uploaded.<br>";//let user know file has been received.
$data=file_get_contents($target_file); //open uploaded file...
for ($i=0; $i<$data; i ){
list($k, $v) = explode(":", $data); //split list into key value pairs
}
$xml= new XMLWriter("<holding></holding>");//start new xml
Комментарии:
1. Вы что-нибудь пробовали?
2. Пожалуйста, поделитесь своим кодом, в котором вы пытались преобразовать txt в xml.
3. Извините за это .. я нажал отправить преждевременно. Вернулся и отредактировал.
Ответ №1:
Ваш базовый цикл будет выглядеть примерно так:
$xml = new SimpleXMLElement('<xml/>');
foreach (exploe("n", $data) as $row )
{
$rowData = explode(":", $row);
$xml->addChild(trim($rowData[0]), trim($rowData[1]));
}
echo "<pre>";
print_r( $xml->asXML() );
echo "</pre>";
Это разбивает ваш текстовый файл при каждом переносе строки, а затем использует все, что осталось от первого двоеточия в каждой строке, в качестве имени узла, и все, что находится справа от первого двоеточия в каждой строке, в качестве значения узла (или, точнее, все, что находится между первым двоеточием и вторым двоеточием,если он существует в той же строке; вам нужно будет обработать их самостоятельно). Я добавил туда обрезку, чтобы убрать ваши пробелы.