使用PHP解析XML数据-选择任意名称的元素注释

使用PHP解析XML数据-选择任意名称的元素注释,php,xml,dom,xpath,Php,Xml,Dom,Xpath,这是$responsestring,我想用PHP解析的XML: <record xmlns="http://www.loc.gov/MARC21/slim"> <leader>00000cam a2200000 a 4500</leader> <controlfield tag="001">21336101</controlfield> <controlfield tag="008">900227m19909999caua

这是$responsestring,我想用PHP解析的XML:

<record xmlns="http://www.loc.gov/MARC21/slim">
<leader>00000cam a2200000 a 4500</leader>
<controlfield tag="001">21336101</controlfield>
<controlfield tag="008">900227m19909999caua     b    001 0 eng  </controlfield>
<datafield ind1=" " ind2=" " tag="010">
  <subfield code="a">   90080908 </subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">0818689315</subfield>
  <subfield code="q">(v. 1)</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">9780818689314</subfield>
  <subfield code="q">(v. 1)</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">0818659319</subfield>
  <subfield code="q">(v. 1 :</subfield>
  <subfield code="q">microfiche)</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">9780818659317</subfield>
  <subfield code="q">(v. 1 :</subfield>
  <subfield code="q">microfiche)</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">0818689455</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="020">
  <subfield code="a">9780818689451</subfield>
</datafield>
<datafield ind1="0" ind2="0" tag="245">
  <subfield code="a">Computer arithmetic /</subfield>
  <subfield code="c">edited by Earl E. Swartzlander, Jr.</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="260">
  <subfield code="a">Los Alamitos, CA :</subfield>
  <subfield code="b">IEEE Computer Society Press,</subfield>
  <subfield code="c">©1990-</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="300">
  <subfield code="a">volumes &lt;1-2&gt; :</subfield>
  <subfield code="b">illustrations ;</subfield>
  <subfield code="c">29 cm.</subfield>
</datafield>
<datafield ind1="1" ind2=" " tag="490">
  <subfield code="a">IEEE Computer Society Press tutorial</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="500">
  <subfield code="a">Vol. 1 is a reprint. Originally published: Stroudsburg, Pa. : Dowden, Hutchinson &amp; Ross, ©1980. Originally published in series: Benchmark papers in electrical engineering and computer science ; 21.</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="500">
  <subfield code="a">Vol 2 is a sequel to the earlier collection.</subfield>
</datafield>
<datafield ind1=" " ind2=" " tag="500">
  <subfield code="a">Vol. 1: 2nd ed.</subfield>
</datafield>
<datafield ind1="2" ind2=" " tag="505">
  <subfield code="a">Arithmetic operations in a binary computer / R.F. Shaw -- High-speed arithmetic in binary computers / O.L. MacSorley -- Fast carry logic for digital computers / B. Gilchrist, J.H. Pomerene, and S.Y. Wong -- A logic for high-speed addition / A. Weinberger and J.L. Smith -- Conditional-sum addition logic / J. Sklansky -- An evaluation of several two-summand binary adders / J. Sklansky -- Adder with distributed control / A. Svoboda -- Multiple addition by residue threshold functions and their representation by array logic / I.T. Ho and T.C. Chen -- Counting responders in an associative memory / C.C. Foster and F.D. Stockton -- Parallel counters / E.E. Swartzlander, Jr. -- A signed binary multiplication technique / A.D. Booth -- Multiplying made easy for digital assemblies / C. Ghest.</subfield>
</datafield>
<datafield ind1="2" ind2=" " tag="505">
  <subfield code="a">A binary multiplication scheme based on squaring / T.C. Chen -- A suggestion for a fast multiplier / C.S. Wallace -- Some schemes for parallel multipliers / L. Dadda -- On parallel digital multipliers / L. Dadda -- A compact high-speed parallel multiplication scheme / W.J. Stenzel, W.J. Kubitz, and G.H. Garcia -- A two's complement parallel array multiplication algorithm / C.R. Baugh and B.A. Wooley -- Comments on "A two's complement parallel array multiplication algorithm" / P.E. Blankenship -- The quasi-serial multiplier / E.E. Swartzlander, Jr. -- The two's complement quasi-serial multiplier / T.G. McDaneld and R.K. Guha -- A new class of digital division methods / J.E Robertson -- An algorithm for rapid binary division / J.B. Wilson and R.S. Ledley.</subfield>
</datafield>
<datafield ind1="2" ind2=" " tag="505">
  <subfield code="a">Digit-by-digit transcendental-function computation / R.J. Linhardt and H.S. Miller -- A unified algorithm for elementary functions / J.S. Walther -- Someproperties of iterative square-rooting methods using high-speed multiplication /C.V. Ramamoorthy, J.R. Goodman, and K.H. Kim -- Radix-16 evaluation of certainelementary functions / M.D. Ercegovac -- On the distribution of numbers / R.W. Hamming -- An analysis of floating-point addition / D.W. Sweeney -- The IBM ... Model 91 : floating-point execution unit / S.F. Anderson [and others] --Design of large high-speed floating-point-arithmetic units / J.B. Gosling --Analysis of rounding methods in floating-point arithmetic / D.J. Kuck, D.S. Parker, Jr., and A.H. Sameh.cos x, tan-¹ x, and cot-¹ x / W.H. Specker.</subfield>
</datafield>
<datafield ind1=" " ind2="0" tag="650">
  <subfield code="a">Computer programming.</subfield>
</datafield>
<datafield ind1=" " ind2="0" tag="650">
  <subfield code="a">Floating-point arithmetic.</subfield>
</datafield>
<datafield ind1=" " ind2="0" tag="650">
  <subfield code="a">Computer arithmetic.</subfield>
</datafield>
<datafield ind1=" " ind2="4" tag="650">
  <subfield code="a">Arithmétique ordinateur.</subfield>
</datafield>
<datafield ind1=" " ind2="7" tag="650">
  <subfield code="a">Computer arithmetic.</subfield>
  <subfield code="2">fast</subfield>
  <subfield code="0">(OCoLC)fst00872029</subfield>
</datafield>
<datafield ind1=" " ind2="7" tag="650">
  <subfield code="a">Computer programming.</subfield>
  <subfield code="2">fast</subfield>
  <subfield code="0">(OCoLC)fst00872390</subfield>
</datafield>
<datafield ind1=" " ind2="7" tag="650">
  <subfield code="a">Floating-point arithmetic.</subfield>
  <subfield code="2">fast</subfield>
  <subfield code="0">(OCoLC)fst00927429</subfield>
</datafield>
<datafield ind1=" " ind2="7" tag="650">
  <subfield code="a">Teoria da computacao.</subfield>
  <subfield code="2">larpcal</subfield>
</datafield>
<datafield ind1=" " ind2="7" tag="650">
  <subfield code="a">Unités arithmétiques et logiques (Informatique)</subfield>
  <subfield code="2">ram</subfield>
</datafield>
<datafield ind1="1" ind2=" " tag="700">
  <subfield code="a">Swartzlander, Earl E.,</subfield>
  <subfield code="c">Jr.,</subfield>
  <subfield code="d">1945-</subfield>
</datafield>
d()是我使用的自定义库函数,类似于var_dump。当我转储$xpatheval->length时,我得到0,当它应该大于0时,即1,因为$xpatheval应该包含相关的XML元素


我可以采用什么解决方案?

通过
属性选择属性

//ns:[attribute::tag=“245”]
或者,使用:

//ns:[@tag=“245”]
    $responseDOM = new DOMDocument();
    $responseDOM->loadXML($responsestring);
    $responseXPath = new DOMXpath($responseDOM);
    $responseXPath->registerNamespace("ns", "http://www.loc.gov/MARC21/slim");
    $xpatheval = $responseXPath->query('//ns:*[tag="245"]');
    d(get_class($xpatheval));
    d($xpatheval->length);