Skip to content

Commit d7d4243

Browse files
committed
Fix to use with new XmlUtil.
1 parent 0edf6db commit d7d4243

File tree

4 files changed

+47
-56
lines changed

4 files changed

+47
-56
lines changed

src/AnyDataset.php

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
use ByJG\AnyDataset\Core\Exception\DatabaseException;
66
use ByJG\AnyDataset\Core\Formatter\XmlFormatter;
7-
use ByJG\Util\XmlUtil;
7+
use ByJG\Util\File;
8+
use ByJG\Util\XmlDocument;
89
use InvalidArgumentException;
910

1011
/**
@@ -56,11 +57,7 @@ class AnyDataset
5657
*/
5758
private $currentRow;
5859

59-
/**
60-
* Path to anydataset file
61-
* @var string|null
62-
*/
63-
private $filename;
60+
private ?File $file;
6461

6562
/**
6663
* @param null|string $filename
@@ -72,10 +69,10 @@ public function __construct($filename = null)
7269
$this->collection = array();
7370
$this->currentRow = -1;
7471

75-
$this->filename = null;
72+
$this->file = null;
7673
$this->defineSavePath($filename, function () {
77-
if (!is_null($this->filename)) {
78-
$this->createFrom($this->filename);
74+
if (!is_null($this->file)) {
75+
$this->createFromFile();
7976
}
8077
});
8178
}
@@ -85,23 +82,23 @@ public function __construct($filename = null)
8582
*/
8683
public function getFilename()
8784
{
88-
return $this->filename;
85+
return $this->file->getFilename();
8986
}
9087

9188
/**
9289
*
93-
* @param string|null $file
90+
* @param string|null $filename
9491
* @param mixed $closure
9592
* @return void
9693
*/
97-
private function defineSavePath($file, $closure)
94+
private function defineSavePath($filename, $closure)
9895
{
99-
if (!is_null($file)) {
100-
$ext = pathinfo($file, PATHINFO_EXTENSION);
101-
if (empty($ext) && substr($file, 0, 6) !== "php://") {
102-
$file .= '.anydata.xml';
96+
if (!is_null($filename)) {
97+
$ext = pathinfo($filename, PATHINFO_EXTENSION);
98+
if (empty($ext) && substr($filename, 0, 6) !== "php://") {
99+
$filename .= '.anydata.xml';
103100
}
104-
$this->filename = $file;
101+
$this->file = new File($filename, allowNotFound: true);
105102
}
106103

107104
$closure();
@@ -115,20 +112,20 @@ private function defineSavePath($file, $closure)
115112
* @throws \ByJG\Serializer\Exception\InvalidArgumentException
116113
* @throws \ByJG\Util\Exception\XmlUtilException
117114
*/
118-
private function createFrom($filepath)
115+
private function createFromFile()
119116
{
120-
if (file_exists($filepath)) {
121-
$anyDataSet = XmlUtil::createXmlDocumentFromFile($filepath);
117+
if (file_exists($this->getFilename())) {
118+
$anyDataSet = new XmlDocument($this->file);
122119
$this->collection = array();
123120

124-
$rows = $anyDataSet->getElementsByTagName("row");
121+
$rows = $anyDataSet->selectNodes("row");
125122
foreach ($rows as $row) {
126123
$sr = new Row();
127124
$fields = $row->getElementsByTagName("field");
128125
foreach ($fields as $field) {
129126
$attr = $field->attributes->getNamedItem("name");
130127
if (is_null($attr) || is_null($attr->nodeValue)) {
131-
throw new InvalidArgumentException('Malformed anydataset file ' . basename($filepath));
128+
throw new InvalidArgumentException('Malformed anydataset file ' . basename($this->getFilename()));
132129
}
133130

134131
$sr->addField($attr->nodeValue, $field->nodeValue);
@@ -159,12 +156,12 @@ public function xml()
159156
*/
160157
public function save($filename = null)
161158
{
162-
$this->defineSavePath($filename, function () {
163-
if (is_null($this->filename)) {
159+
$this->defineSavePath($filename, function () use ($filename){
160+
if (is_null($this->file)) {
164161
throw new DatabaseException("No such file path to save anydataset");
165162
}
166163

167-
(new XmlFormatter($this->getIterator()))->saveToFile($this->filename);
164+
(new XmlFormatter($this->getIterator()))->saveToFile($this->file->getFilename());
168165
});
169166
}
170167

src/Formatter/XmlFormatter.php

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,41 @@
33
namespace ByJG\AnyDataset\Core\Formatter;
44

55
use ByJG\AnyDataset\Core\GenericIterator;
6-
use ByJG\Util\XmlUtil;
7-
use DOMDocument;
8-
use DOMNode;
6+
use ByJG\Util\XmlDocument;
97

108
class XmlFormatter extends BaseFormatter
119
{
1210
/**
1311
* Return a DOMNode representing AnyDataset
1412
*
1513
* @param array $collection
16-
* @return DOMNode
14+
* @return XmlDocument
1715
*/
1816
protected function anydatasetXml($collection)
1917
{
20-
$anyDataSet = XmlUtil::createXmlDocumentFromStr("<anydataset></anydataset>");
21-
$nodeRoot = $anyDataSet->getElementsByTagName("anydataset")->item(0);
18+
$anyDataSet = new XmlDocument("<anydataset></anydataset>");
2219
foreach ($collection as $sr) {
23-
$row = $this->rowXml($sr);
24-
$nodeRow = $row->getElementsByTagName("row")->item(0);
25-
$newRow = XmlUtil::createChild($nodeRoot, "row");
26-
XmlUtil::addNodeFromNode($newRow, $nodeRow);
20+
$this->rowXml($sr, $anyDataSet);
2721
}
2822

2923
return $anyDataSet;
3024
}
3125

3226
/**
3327
* @param array $row
34-
* @return DOMDocument
28+
* @return XmlDocument
3529
*/
36-
protected function rowXml($row)
30+
protected function rowXml($row, XmlDocument $parentDocument = null)
3731
{
38-
$node = XmlUtil::createXmlDocumentFromStr("<row></row>");
39-
$root = $node->getElementsByTagName("row")->item(0);
32+
if (!empty($parentDocument)) {
33+
$node = $parentDocument->appendChild('row');
34+
} else {
35+
$node = new XmlDocument("<row></row>");
36+
}
4037
foreach ($row as $key => $value) {
41-
if (!is_array($value)) {
42-
$field = XmlUtil::createChild($root, "field", $value);
43-
XmlUtil::addAttribute($field, "name", $key);
44-
} else {
45-
foreach ($value as $valueItem) {
46-
$field = XmlUtil::createChild($root, "field", $valueItem);
47-
XmlUtil::addAttribute($field, "name", $key);
48-
}
38+
foreach ((array)$value as $valueItem) {
39+
$field = $node->appendChild("field", $valueItem);
40+
$field->addAttribute("name", $key);
4941
}
5042
}
5143
return $node;
@@ -58,9 +50,9 @@ protected function rowXml($row)
5850
public function raw()
5951
{
6052
if ($this->object instanceof GenericIterator) {
61-
return $this->anydatasetXml($this->object->toArray());
53+
return $this->anydatasetXml($this->object->toArray())->DOMDocument();
6254
}
63-
return $this->rowXml($this->object->toArray());
55+
return $this->rowXml($this->object->toArray())->DOMNode();
6456
}
6557

6658
/**

tests/AnyDatasetTest.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
use ByJG\AnyDataset\Core\Formatter\JsonFormatter;
88
use ByJG\AnyDataset\Core\Formatter\XmlFormatter;
99
use ByJG\AnyDataset\Core\IteratorFilter;
10+
use ByJG\Util\XmlDocument;
1011
use PHPUnit\Framework\TestCase;
12+
use PHPUnit\Util\Xml;
1113

1214
class AnyDatasetTest extends TestCase
1315
{
@@ -77,15 +79,15 @@ public function testXML()
7779
$this->object->appendRow();
7880
$this->object->addField('field', 'value');
7981

80-
$xmlDom = \ByJG\Util\XmlUtil::createXmlDocumentFromStr(
82+
$xmlDom = new XmlDocument(
8183
'<?xml version="1.0" encoding="utf-8"?>'
8284
. '<anydataset>'
8385
. '<row>'
8486
. '<field name="field">value</field>'
8587
. '</row>'
8688
. '</anydataset>'
8789
);
88-
$xmlDomValidate = \ByJG\Util\XmlUtil::createXmlDocumentFromStr($this->object->xml());
90+
$xmlDomValidate = new XmlDocument($this->object->xml());
8991

9092
$this->assertEquals($xmlDom, $xmlDomValidate);
9193
}
@@ -95,7 +97,7 @@ public function testXMFormatter()
9597
$this->object->appendRow();
9698
$this->object->addField('field', 'value');
9799

98-
$xmlDom = \ByJG\Util\XmlUtil::createXmlDocumentFromStr(
100+
$xmlDom = new XmlDocument(
99101
'<?xml version="1.0" encoding="utf-8"?>'
100102
. '<anydataset>'
101103
. '<row>'
@@ -105,7 +107,7 @@ public function testXMFormatter()
105107
);
106108

107109
$formatter = new XmlFormatter($this->object->getIterator());
108-
$this->assertEquals($xmlDom, $formatter->raw());
110+
$this->assertEquals($xmlDom->DOMNode(), $formatter->raw());
109111
}
110112

111113
public function testJsonFormatter()

tests/RowTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use ByJG\AnyDataset\Core\Formatter\JsonFormatter;
66
use ByJG\AnyDataset\Core\Formatter\XmlFormatter;
77
use ByJG\AnyDataset\Core\Row;
8+
use ByJG\Util\XmlDocument;
89
use PHPUnit\Framework\TestCase;
9-
use ByJG\Util\XmlUtil;
1010
use stdClass;
1111
use Tests\Sample\ModelGetter;
1212
use Tests\Sample\ModelPropertyPattern;
@@ -180,7 +180,7 @@ public function testGetDomObject()
180180
{
181181
$this->fill();
182182

183-
$dom = XmlUtil::CreateXmlDocumentFromStr(
183+
$dom = new XmlDocument(
184184
"<row>"
185185
. "<field name='field1'>10</field>"
186186
. "<field name='field1'>20</field>"
@@ -191,7 +191,7 @@ public function testGetDomObject()
191191

192192
$formatter = (new XmlFormatter($this->object))->raw();
193193

194-
$this->assertEquals($dom, $formatter);
194+
$this->assertEquals($dom->DOMNode(), $formatter);
195195
}
196196

197197
public function testGetJson()

0 commit comments

Comments
 (0)