티스토리 뷰

출처.php.net-DOMDocument class

 

DOMDocument 만으로는 class를 선택자로 지정하여 불러올 수 없다.

그래서, DomXPath 를 활용하여, 오브젝트 내 선언된 class 를 선택자로 지정하여 불러온다.

libxml_use_internal_errors(true);
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($result);

$xpath = new \DomXPath($doc);
$nodeList = $xpath->query("//div[@class='sample']");
$node = $nodeList->item(0);

echo $node->nodeValue;


* HTML형태로 반환 시, 아래와 같이 선언하여 활용
echo $doc->saveHTML($node);

 

 

XPath문법을 통해서 Node를 선택할 수 있고, 아래 표현식들은 참고로 알아두자.

1. 기본선언
/ : 절대경로 - 현재 Node 부터 선택
// : 상대경로 - 현재 Node 부터 선택

2.모든속성 찾기
/*
//*

위와 같이 선언할 경우, 매칭되는 모든 Node를 선택

3.다중선택
| : 연산자를 이용하여 다중 선택

//title | //body
/title | //book

 

참고.PHP-DOMDocument Method [바로가기]

public createAttribute(string $localName): DOMAttr|false
public createAttributeNS(?string $namespace, string $qualifiedName): DOMAttr|false
public createCDATASection(string $data): DOMCdataSection|false
public createComment(string $data): DOMComment|false
public createDocumentFragment(): DOMDocumentFragment|false
public createElement(string $localName, string $value = ""): DOMElement|false
public createElementNS(?string $namespace, string $qualifiedName, string $value = ""): DOMElement|false
public createEntityReference(string $name): DOMEntityReference|false
public createProcessingInstruction(string $target, string $data = ""): DOMProcessingInstruction|false
public createTextNode(string $data): DOMText|false
public getElementById(string $elementId): ?DOMElement
public getElementsByTagName(string $qualifiedName): DOMNodeList
public getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList
public importNode(DOMNode $node, bool $deep = false): DOMNode|false
public load(string $filename, int $options = 0): DOMDocument|bool
public loadHTML(string $source, int $options = 0): DOMDocument|bool
public loadHTMLFile(string $filename, int $options = 0): DOMDocument|bool
public loadXML(string $source, int $options = 0): DOMDocument|bool
public normalizeDocument(): void
public registerNodeClass(string $baseClass, ?string $extendedClass): bool
public relaxNGValidate(string $filename): bool
public relaxNGValidateSource(string $source): bool
public save(string $filename, int $options = 0): int|false
public saveHTML(?DOMNode $node = null): string|false
public saveHTMLFile(string $filename): int|false
public saveXML(?DOMNode $node = null, int $options = 0): string|false
public schemaValidate(string $filename, int $flags = 0): bool
public schemaValidateSource(string $source, int $flags = 0): bool
public validate(): bool
public xinclude(int $options = 0): int|false
댓글