Сделайте первый символ строки заглавной, используя php. Затем вывод с помощью XMLWriter.

Это, вероятно, очень просто, но я не знаю, как лучше всего это сделать. Я извлекаю данные из базы данных mysqli с помощью php для создания XML-документа. Мой код ниже работает, но данные в поле «Заголовок» все заглавные. Мне нужен только первый символ с большой буквы, остальные строчные. Я знаю, что мне нужна функция ucwords, но пока нет кубиков. Поле Заголовок содержит более одного слова, написанного заглавными буквами.

Мне нужны данные, отформатированные с помощью ucwords, прежде чем они попадут в область XML. Я предпочитаю делать это в php вместо обновления данных в БД. Спасибо за помощь!

<?php

// Connect to the database
global $link;
$link = mysqli_connect("localhost", "root", "pass", "database");

// Verify the connection worked
if (!$link) {
    printf("Connection to database failed: %s\n", mysqli_connect_error());
    exit();
}

// Prepare the database query
   $stmt = mysqli_prepare($link, "SELECT * FROM table"); 

// Run the database query
   mysqli_stmt_execute($stmt);

// Bind the result columns to PHP variables
   mysqli_stmt_bind_result($stmt, $Name, $Title);    

// Create a new XML document in memory

$xw = new xmlWriter();
$xw->openURI('php://output');
$xw->openMemory();
$xw->startDocument('1.0');

// Start the outer data container
$xw->StartElement('rss');
$xw->WriteAttribute('version', '2.0');

// Fetch values
  while (mysqli_stmt_fetch($stmt)) {

{

$xw->startElement('item');

  // Write out the elements
    $xw->writeElement('Name', $Name);
    $xw->writeElement('Title', $Title);
    $xw->endElement();

}

// End container
$xw->endElement();

// End the document
$xw->endDocument();


//header('Content-Type: text/xml');
print $xw->outputMemory(true);

// Close the database statement
mysqli_stmt_close($stmt);

// Close the database connection
mysqli_close($link);
 }
?>

person Dan M    schedule 28.10.2011    source источник
comment
извините, что звучит как новичок, но я должен поставить это после оператора привязки? это имеет значение? я добавил ucwords(strtolower($Title)); а затем в выводе xml мой заголовок не отображается. Вот что меня сбивает с толку.   -  person Dan M    schedule 28.10.2011
comment
ucwords и strtolower вернут измененную строку. они не изменят исходное значение. если вы сделаете $Title = ucwords(strtolower($Title)); то с этого момента $Title будет измененной версией. я думаю, что вам нужно $xw-›writeElement('Title', ucwords(strtolower($Title)));   -  person galchen    schedule 28.10.2011
comment
Бинго, спасибо галхен! делать это таким образом не приходило мне в голову. Вот так я учусь, спасибо большое!   -  person Dan M    schedule 28.10.2011


Ответы (1)


Соответствующий раздел в http://php.net/manual/en/function.ucwords.php

<?php
$foo = 'hello world!';
$foo = ucwords($foo);             // Hello World!

$bar = 'HELLO WORLD!';
$bar = ucwords($bar);             // HELLO WORLD!
$bar = ucwords(strtolower($bar)); // Hello World!
?>

Для вашего запроса я бы заменил:

// Prepare the database query
$stmt = mysqli_prepare($link, "SELECT * FROM table"); 

// Run the database query
mysqli_stmt_execute($stmt);

// Bind the result columns to PHP variables
mysqli_stmt_bind_result($stmt, $Name, $Title);    

С участием:

$results = mysqli_query("SELECT * FROM table");

Затем измените цикл while на:

foreach($results as $row) {
    $xw->startElement('item');
    $xw->writeElement('Name', ucwords(strtolower($row['name']));
    $xw->writeElement('Title', ucwords(strtolower($row['title']));
    $xw->endElement();
}

Очевидно, вам нужно повозиться с этим, так как я не знаю схему вашей базы данных.

Основная причина изменения материала mysqli заключается в том, что вам не гарантируется тот же порядок столбцов базы данных, если вы в будущем внесете изменения в схему базы данных.

Удачи!

person hafichuk    schedule 28.10.2011
comment
спасибо, Хафичук, руководство, которому я следовал, но я, новичок, не могу заставить XML-часть работать после этого. - person Dan M; 28.10.2011