I am trying to parse the following xml and keep on running into the same error message "Unable to parse XML from string", please see the below error message.
protected function resolveXmlObject($xml): Document
{
if (! $xml) {
throw new InvalidContentException('Unable to parse XML from string.');
}
return $this->document->setContent($xml);
}
I am new to using xml and am unsure what the issue is with the code that I have provided. If someone could point me in the right direction as to what I am doing wrong that would be greatly appreciated.
Controller
use Orchestra\Parser\Xml\Facade as XmlParser;
public function upload()
{
$xml = XmlParser::load(asset('xml/data.xml'));
$user = $xml->parse([
'id' => ['uses' => 'programme::id'],
'name' => ['uses' => 'programme.name'],
]);
return view ('projects.upload', compact('user'));
}
XML
<?xml version="1.0" encoding=”UTF-8”?>
<programme data>
<title>Programme Data</title>
<programme id="1">
<programme 1>
<name>A nightmare on Elm Street</name>
<image path>../images/Elm Street.jpg</image path>
<mood>Scared</mood>
</programme 1>
</programme>
View
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>Moodslider</h1>
<div class="box">
<td style="text-align: center; vertical-align: middle;">
</div>
<div class="slidecontainer">Agitated
<input type="range" min="1" max="5" value="1" class="slider" id="myRange">Calm
</div>
<div class="slidecontainer">Happy
<input type="range" min="1" max="5" value="1" class="slider" id="myRange">Sad
</div>
<div class="slidecontainer">Tired
<input type="range" min="1" max="5" value="1" class="slider" id="myRange">Wide Awake
</div>
<div class="slidecontainer">Scared
<input type="range" min="1" max="5" value="1" class="slider" id="myRange">Fearless
</div>
<form action="/action_page.php">
<input type="text" name="fname" placeholder="No content 1"><br>
<input type="text" name="lname" placeholder="No content 2"><br>
</form>
<form action="/projects/upload" method="get" enctype="multipart/form- data">Select image to upload:
<!--{{ csrf_field() }} -->
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
The call to asset('xml/data.xml')
does not give you a file or an internal path, it gives you the public URL to the file inside the public
folder. Try it with public_path('xml/data.xml')
.
https://laravel.com/docs/5.7/helpers#method-public-path
E.g.
$xml = XmlParser::load(public_path('xml/data.xml'));