Es ist schwierig, XML zu analysieren, das mit POST aus einem Webformular erstellt wurde.NSXMLParser wirkt merkwürdig
Hier ist das Szenario:
1) Benutzer auf eine Web-Seite kommt, gibt seinen Namen in ein Textfeld, und Klicks Zustellen
2) ruft eine PHP-Datei (genannt „makeXML. php "), die eine XML-Datei generiert, die den Namen dieses Benutzers in einem Tag namens" currentUserName "
enthält 3) eine iPhone App lädt dann diese" makeXML.php "-Datei (mit 'loadXMLByURL') und analysiert sie, speziell auf Ausgabe des Inhalts des Tags "currentUserName" in ein UILabel-Objekt.
sollte ziemlich einfach sein - aber aus irgendeinem Grund, der Inhalt des „currentUserName“ Tag kommen leer im App up - obwohl sie sehr gut in der generierten XML-Code im Browser angezeigt.
Was ist noch seltsamer ist, dass, wenn ich stattdessen hart Code ein Wert auf „uName“ in der PHP-Datei („makeXML.php“) - wie (unter Verwendung von $ _POST gegen diesen Wert aus dem Formular zu bekommen [ "userName"];) - alles funktioniert einwandfrei. Ich kann den Wert aus dem Tag "currentUserName" abrufen und ihn an das UILabel-Objekt ausgeben.
NSXMLParser scheint aus irgendeinem Grund POST'ed Werte einfach nicht zu mögen.
Irgendwelche Ideen?
Hier ist der Code:
portal.html:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Web-Form</title>
</head>
<body>
<form name="form1" method="post" action="makeXML.php">
<p>Enter your name:</p>
<p>
<input name="userName" type="text" />
</p>
<p>
<input type="submit" value="SUBMIT" />
</p>
</form>
</body>
</html>
Hier ist "makeXML.php":
<?php
header("Content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
echo "<document>";
$uName = $_POST["userName"];
echo "Here is the name you typed:";
echo "<br/>";
echo "<theUsersName>$uName</theUsersName>";
echo "</document>";
?>
Hier ist der ausgegebene Code aus makeXML.php (Hinweis: dass dieser Code in einer Zeile ausgegeben wird - soll das sein? Sollte das "br" Tag nicht funktionieren und einen Zeilenumbruch erzwingen?
Wieder<?xml version="1.0" encoding="UTF-8" ?><document>Here is the name you typed:<br/><theUsersName>johnson</theUsersName></document>
, beachten Sie, dass, wenn ich ersetzen:
$uName = $_POST["userName"];
mit Klar alt:
$uName = "John";
Alles perfekt und der Name "John" erscheint richtig in meine UILabel funktioniert .. .
So ist ich im Laufe Ihres Szenarios, dass zu verstehen, gibt es * zwei * Anfragen an makeXML.php? Einer von einer Webseite, einer von einem iPhone? – QED
Oh ja, ich denke schon - und das ist offensichtlich das Problem, nicht wahr? :-) Ursache Wenn die iPhone-App "makeXML.php" aufruft, wird diese Seite erneut verarbeitet - ohne jedoch einen Wert für "userName" anzugeben - was ein leeres Feld zurückgibt. Also, wie löse ich das? Muss ich eine Datenbank verwenden, um die Daten zu erhalten? Das bedeutet, dass der von der Webseite eingegebene "userName" in einer Datenbank gespeichert wird und die iPhone App dann ein anderes PHP-Skript aufruft, das die Datenbank liest und "userName" daraus abruft? Scheint so viel Arbeit für etwas ziemlich Einfaches. Gibt es keinen anderen Weg? – sirab333
Es hängt davon ab, was Sie bauen. Das Problem ist, dass Sie nicht wirklich wissen, wonach Sie fragen - Sie dachten, es wäre ein XML-Parser-Problem, aber das Problem ist nicht mit XML-Parsing oder sogar PHP oder irgendetwas anderes - Ihr Problem ist zu verstehen, wie System als Ganzes passt zusammen und funktioniert. Sie müssen etwas lesen. – QED