Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Close bug # 19845 Record::toXML returns nothing

When the toXML() routine was refactored, a dangling reference to a
non-existent variable was left behind. In addition, we were able to
improve the toXML() routine such that it returns XML without
automatically printing it. Thanks to jfragoulis for reporting this
problem and offering a suggested fix.

Signed-off-by: Dan Scott <dan@coffeecode.net>
  • Loading branch information...
commit 7c050f3900237e771f164d71d713b3d0a2dfc292 1 parent d562b8f
@dbs dbs authored
View
8 File/MARC/Record.php
@@ -629,7 +629,8 @@ function toXML($encoding = "UTF-8", $indent = true, $single = true)
{
$this->marcxml->setIndent($indent);
if ($single) {
- $this->marc->toXMLHeader();
+ $this->marcxml->startElement("collection");
+ $this->marcxml->writeAttribute("xmlns", "http://www.loc.gov/MARC21/slim");
}
$this->marcxml->startElement("record");
@@ -680,10 +681,11 @@ function toXML($encoding = "UTF-8", $indent = true, $single = true)
$this->marcxml->endElement(); // end record
if ($single) {
- return $this->marc->toXMLFooter();
+ $this->marcxml->endElement(); // end collection
+ $this->marcxml->endDocument();
}
+ return $this->marcxml->outputMemory();
}
-
// }}}
}
View
1  package.xml
@@ -84,6 +84,7 @@ This package is based on the PHP MARC package, originally called "php-marc", tha
<file name="marc_016.phpt" role="test" />
<file name="marc_017.phpt" role="test" />
<file name="marc_018.phpt" role="test" />
+ <file name="marc_019.phpt" role="test" />
<file name="marc_16783.phpt" role="test" />
<file name="marc_field_001.phpt" role="test" />
<file name="marc_field_002.phpt" role="test" />
View
2  tests/marc_016.phpt
@@ -29,7 +29,7 @@ while ($record = $records->next()) {
}
// Generate the XML output for this record
- $record->toXML('UTF-8', true, false);
+ print $record->toXML('UTF-8', true, false);
}
// Add the </collection> closing element and dump the XMLWriter contents
print $records->toXMLFooter();
View
113 tests/marc_019.phpt
@@ -0,0 +1,113 @@
+--TEST--
+marc_019: generate a MARCXML record not in a collection element
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+$dir = dirname(__FILE__);
+require 'File/MARC.php';
+
+$records = new File_MARC($dir . '/' . 'music.mrc');
+
+// Iterate through the retrieved records
+$record = $records->next();
+
+// Change each 852 $c to "Audio-Visual"
+$holdings = $record->getFields('852');
+foreach ($holdings as $holding) {
+
+ // Get the $c subfields from this field
+ $formats = $holding->getSubfields('c');
+ foreach ($formats as $format) {
+ if ($format->getData('AV')) {
+ $format->setData('Audio-Visual');
+ }
+ }
+}
+
+// Generate the XML output for this record
+print($record->toXML('UTF-8', true, true));
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<collection xmlns="http://www.loc.gov/MARC21/slim">
+ <record>
+ <leader>01145ncm 2200277 i 4500</leader>
+ <controlfield tag="001">000073594</controlfield>
+ <controlfield tag="004">AAJ5802</controlfield>
+ <controlfield tag="005">20030415102100.0</controlfield>
+ <controlfield tag="008">801107s1977 nyujza </controlfield>
+ <datafield tag="010" ind1=" " ind2=" ">
+ <subfield code="a"> 77771106 </subfield>
+ </datafield>
+ <datafield tag="035" ind1=" " ind2=" ">
+ <subfield code="a">(CaOTUIC)15460184</subfield>
+ </datafield>
+ <datafield tag="035" ind1="9" ind2=" ">
+ <subfield code="a">AAJ5802</subfield>
+ </datafield>
+ <datafield tag="040" ind1=" " ind2=" ">
+ <subfield code="a">LC</subfield>
+ </datafield>
+ <datafield tag="050" ind1="0" ind2="0">
+ <subfield code="a">M1366</subfield>
+ <subfield code="b">.M62</subfield>
+ <subfield code="d">M1527.2</subfield>
+ </datafield>
+ <datafield tag="245" ind1="0" ind2="4">
+ <subfield code="a">The Modern Jazz Quartet :</subfield>
+ <subfield code="b">The legendary profile. --</subfield>
+ </datafield>
+ <datafield tag="260" ind1=" " ind2=" ">
+ <subfield code="a">New York :</subfield>
+ <subfield code="b">M.J.Q. Music,</subfield>
+ <subfield code="c">c1977.</subfield>
+ </datafield>
+ <datafield tag="300" ind1=" " ind2=" ">
+ <subfield code="a">score (72 p.) ;</subfield>
+ <subfield code="c">31 cm.</subfield>
+ </datafield>
+ <datafield tag="500" ind1=" " ind2=" ">
+ <subfield code="a">For piano, vibraphone, drums, and double bass.</subfield>
+ </datafield>
+ <datafield tag="505" ind1="0" ind2=" ">
+ <subfield code="a">Lewis, J. Django.--Lewis, J. Plastic dreams (music from the film Kemek).--Lewis, J. Dancing (music from the film Kemek).--Lewis, J. Blues in A minor.--Lewis, J. Blues in B♭.--Lewis, J. Precious joy.--Jackson, M. The martyr.--Jackson, M. The legendary profile.</subfield>
+ </datafield>
+ <datafield tag="650" ind1=" " ind2="0">
+ <subfield code="a">Jazz.</subfield>
+ </datafield>
+ <datafield tag="650" ind1=" " ind2="0">
+ <subfield code="a">Motion picture music</subfield>
+ <subfield code="v">Excerpts</subfield>
+ <subfield code="v">Scores.</subfield>
+ </datafield>
+ <datafield tag="700" ind1="1" ind2="2">
+ <subfield code="a">Lewis, John,</subfield>
+ <subfield code="d">1920-</subfield>
+ <subfield code="t">Selections.</subfield>
+ <subfield code="f">1977.</subfield>
+ </datafield>
+ <datafield tag="700" ind1="1" ind2="2">
+ <subfield code="a">Jackson, Milt.</subfield>
+ <subfield code="t">Martyrs.</subfield>
+ <subfield code="f">1977.</subfield>
+ </datafield>
+ <datafield tag="700" ind1="1" ind2="2">
+ <subfield code="a">Jackson, Milt.</subfield>
+ <subfield code="t">Legendary profile.</subfield>
+ <subfield code="f">1977.</subfield>
+ </datafield>
+ <datafield tag="740" ind1="4" ind2=" ">
+ <subfield code="a">The legendary profile.</subfield>
+ </datafield>
+ <datafield tag="852" ind1="0" ind2="0">
+ <subfield code="b">MUSIC</subfield>
+ <subfield code="c">Audio-Visual</subfield>
+ <subfield code="k">folio</subfield>
+ <subfield code="h">M1366</subfield>
+ <subfield code="i">M62</subfield>
+ <subfield code="9">1</subfield>
+ <subfield code="4">Marvin Duchow Music</subfield>
+ <subfield code="5"></subfield>
+ </datafield>
+ </record>
+</collection>
View
2  tests/marc_xml_008.phpt
@@ -29,7 +29,7 @@ while ($record = $records->next()) {
}
// Generate the XML output for this record
- $record->toXML('UTF-8', true, false);
+ print $record->toXML('UTF-8', true, false);
}
// Add the </collection> closing element and dump the XMLWriter contents
print $records->toXMLFooter();
Please sign in to comment.
Something went wrong with that request. Please try again.