하이픈으로 연결된 이름을 가진 SimpleXML 노드 읽기
PHP하이픈으로 연결된 이름을 가진 SimpleXML 노드 읽기
나는 다음과 같은 XML을 가지고있다 :
<?xml version="1.0" encoding="UTF-8"?>
<gnm:Workbook xmlns:gnm="http://www.gnumeric.org/v10.dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gnumeric.org/v9.xsd">
<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.1">
<office:meta>
<dc:creator>Mark Baker</dc:creator>
<dc:date>2010-09-01T22:49:33Z</dc:date>
<meta:creation-date>2010-09-01T22:48:39Z</meta:creation-date>
<meta:editing-cycles>4</meta:editing-cycles>
<meta:editing-duration>PT00H04M20S</meta:editing-duration>
<meta:generator>OpenOffice.org/3.1$Win32 OpenOffice.org_project/310m11$Build-9399</meta:generator>
</office:meta>
</office:document-meta>
</gnm:Workbook>
그리고 office : document-meta 노드를 읽으 려하면 그 아래에있는 다양한 요소 (dc : creator, meta : creation-date 등)가 추출됩니다.
다음 코드는 :
$xml = simplexml_load_string($gFileData);
$namespacesMeta = $xml->getNamespaces(true);
$officeXML = $xml->children($namespacesMeta['office']);
var_dump($officeXML);
echo '<hr />';
나에게 준다 :
object(SimpleXMLElement)[91]
public 'document-meta' =>
object(SimpleXMLElement)[93]
public '@attributes' =>
array
'version' => string '1.1' (length=3)
public 'meta' =>
object(SimpleXMLElement)[94]
하지만 다음을 사용하여 document-meta 요소를 읽으려고하면 :
$xml = simplexml_load_string($gFileData);
$namespacesMeta = $xml->getNamespaces(true);
$officeXML = $xml->children($namespacesMeta['office']);
$docMeta = $officeXML->document-meta;
var_dump($docMeta);
echo '<hr />';
나는 얻다
Notice: Use of undefined constant meta - assumed 'meta' in /usr/local/apache/htdocsNewDev/PHPExcel/Classes/PHPExcel/Reader/Gnumeric.php on line 273
int 0
나는 SimpleXML이 존재하지 않는 노드 "문서"를 $ officeXML에서 추출하려고 시도하고, 그 다음에는 (존재하지 않는) 상수 인 "meta"의 값을 빼서 문서 - 메타 노드보다는 정수 0 결과를 강요한다고 가정합니다.
SimpleXML을 사용하여이를 해결할 수있는 방법이 있습니까? 아니면 XMLReader를 사용하여 다시 작성해야합니까? 어떤 도움을 주셔서 감사합니다.
해결법
-
==============================
1.귀하의 가정은 정확합니다. 용도
귀하의 가정은 정확합니다. 용도
$officeXML->{'document-meta'}
그것을 작동하게합니다.
위 내용은 요소 노드에 적용됩니다. 속성 노드 (SimpleXmlElement를 덤핑 할 때 @attributes 속성에있는 속성 노드)에는 하이픈을 넣을 때 특별한 구문을 액세스 할 필요가 없습니다. 배열 표기법을 통해 규칙적으로 액세스 할 수 있습니다.
$xml = <<< XML <root> <hyphenated-element hyphenated-attribute="bar">foo</hyphenated-element> </root> XML; $root = new SimpleXMLElement($xml); echo $root->{'hyphenated-element'}; // prints "foo" echo $root->{'hyphenated-element'}['hyphenated-attribute']; // prints "bar"
자세한 예제는 매뉴얼의 SimpleXml Basics를 참조하십시오.
from https://stackoverflow.com/questions/3626901/simplexml-reading-node-with-a-hyphenated-name by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP 7.2에서 Mcrypt 제거 준비 (0) | 2018.09.11 |
---|---|
PHP 평등 (== double equals)과 ID (=== triple equals) 비교 연산자는 어떻게 다른가요? (0) | 2018.09.11 |
method = "post"enctype = "text / plain"은 호환되지 않습니까? (0) | 2018.09.11 |
경고 : mysql_fetch_array ()는 매개 변수 1이 resource이고 boolean이 [duplicate] 인 것으로 가정합니다. (0) | 2018.09.11 |
PHP 코드를 사용하여 MySQL 데이터베이스에 이미지를 업로드하는 방법 (0) | 2018.09.11 |