Перший символ рядка з великої літери використовуйте php. Потім виведіть з XMLWriter.

Це, мабуть, дуже просто, але я не знаю, як це зробити. Я витягую дані з бази даних mysqli з PHP для створення XML-документа. Мій код нижче працює, але дані в полі Title - це всі літери. Мені потрібен лише перший символ з великої літери, решта нижній регістр. Я знаю, що мені потрібна функція ucwords, але ще немає кубиків. Поле Title має більше одного слова у всіх шапках.

Мені потрібні дані, відформатовані ucwords, перш ніж він перейде в область XML. Я вважаю за краще робити це у PHP замість оновлення даних у db. Дякую за допомогу!

<?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);
 }
?>
1
Ви зрозуміли все?
додано Автор hafichuk, джерело
ucwords (strtolower ($ str))?
додано Автор galchen, джерело
ucwords і strtolower повернуть змінений рядок. вони не змінюють початкового значення. якщо ви робите $ Title = ucwords (strtolower ($ Title)); потім з цього моменту, $ Title буде модифікованою версією. я думаю, що ви хочете $ xw-> writeElement ('Title', ucwords (strtolower ($ Title)));
додано Автор galchen, джерело
вибачте звук, як newb, але чи можу я це зробити після оператора bind? це має значення? я додав ucwords (strtolower ($ Title)); а потім у виводі xml мій заголовок не з'являється. Це те, що мене спотикає.
додано Автор Dan M, джерело
Бінго, спасибі galchen! роблячи це таким чином не пересікало мій розум. Ну це, як я дізнаюся, спасибі багато!
додано Автор Dan M, джерело

1 Відповіді

The relevant section in 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 є те, що вам не гарантовано мати однаковий порядок стовпців бази даних, якщо ви в майбутньому внесете зміни до бази даних.

Удачі!

1
додано
np, сподіваюся, що відповідь працює для вас
додано Автор hafichuk, джерело
завдяки Hafichuk, керівництво я пішов, але новачок мені не може здатися, щоб отримати частина XML, що працює пізніше.
додано Автор Dan M, джерело
будемо робити, спасибі за поради Хафічук, з найкращими побажаннями!
додано Автор Dan M, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php