PHP ungültiges Zeichen Fehler
Ich bin immer diese Fehlermeldung, wenn dieser code ausgeführt:
Fatal error: Uncaught exception 'DOMException' with message 'Invalid Character Error' in test.php:29 Stack trace: #0 test.php(29): DOMDocument->createElement('1OhmStable', 'a') #1 {main} thrown in test.php on line 29
Den Knoten, die aus dem original-XML-Datei enthält ungültige Zeichen, aber da bin ich Strippen die ungültigen Zeichen entfernt die Knoten, die Knoten erstellt werden soll. Welche Art von Codierung brauche ich, wenn ich auf die original-XML-Dokument? Brauche ich zum entschlüsseln des saveXML?
function __cleanData($c)
{
return preg_replace("/[^A-Za-z0-9]/", "",$c);
}
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('test.xml');
$xml->formatOutput = true;
$append = array();
foreach ($xml->getElementsByTagName('product') as $product )
{
foreach($product->getElementsByTagName('name') as $name )
{
$append[] = $name;
}
foreach ($append as $a)
{
$nodeName = __cleanData($a->textContent);
$element = $xml->createElement(htmlentities($nodeName) , 'a');
}
$product->removeChild($xml->getElementsByTagName('details')->item(0));
$product->appendChild($element);
}
$result = $xml->saveXML();
$file = "data.xml";
file_put_contents($file,$result);
Dies ist, was die original-XML sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/v1/xsl/xml_pretty_printer.xsl" type="text/xsl"?>
<products>
<product>
<modelNumber>M100</modelNumber>
<itemId>1553725</itemId>
<details>
<detail>
<name>1 Ohm Stable</name>
<value>600 x 1</value>
</detail>
</details>
</product>
</products>
Wird das neue Dokument sollte Aussehen wie dieses:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/v1/xsl/xml_pretty_printer.xsl" type="text/xsl"?>
<products>
<product>
<modelNumber>M100</modelNumber>
<itemId>1553725</itemId>
<1 Ohm Stable>
</1 Ohm Stable>
</product>
</products>
Einfach aufstellen
Warum postest du die saubere version?
Was meinst du?
Der xml-Code gepostet wird, nachdem Sie entfernt die ungültigen Zeichen? Warum nicht buchen Sie die original-version ?
InformationsquelleAutor Ryan | 2011-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach können Sie nicht verwenden, ein element name mit startnummer
php-parse-xml - Fehler: StartTag: invalid element name
Einen schönen Artikel :- http://www.xml.com/pub/a/2001/07/25/namingparts.html
InformationsquelleAutor ajreal
Haben Sie nicht geschrieben, wo du den Fehler. Im Falle, dass es nach reinigen Sie den Wert, dies ist meine Vermutung:
Dieser Ersatz ist nicht geschrieben für UTF-8-kodierte strings (die DOMDocument). Sie können es UTF-8 kompatibel mithilfe der
u
-Modifikator (PCRE8)Docs:Es ist nur eine Vermutung, ich schlage vor, Sie machen es, genauer zu deiner Frage, welcher Teil des Codes löst den Fehler.
InformationsquelleAutor hakre
Selbst wenn
__cleandata()
entfernt alle anderen Zeichen als die lateinischen Buchstaben a-z und zahlen, ist es nicht unbedingt eine Garantie, dass das Ergebnis in einem gültigen XML-Namen. Ihre Funktion kann die Rückgabe von strings, die mit einer Zahl beginnen, aber zahlen sind illegal name start Zeichen in XML, Sie können nur einen Namen nach dem Vornamen Charakter. Auch Leerzeichen sind verboten im Namen, also das ist ein weiterer Punkt, wo Ihr erwartet, dass die XML-Ausgabe fehlschlagen würde.InformationsquelleAutor jasso
Sicherzugehen, dass die Skripte haben die gleiche Codierung: wenn es UTF stellen Sie sicher, Sie sind ohne Byte Order Mark (BOM) an der sehr Beginn der Datei.
Dazu öffnet man die XML-Datei mit einem text-editor wie Notepad++ und konvertieren Sie Ihre Datei in "UTF-8 ohne BOM".
Ich hatte einen ähnlichen Fehler, aber mit einem json-Datei
InformationsquelleAutor Marco Pace