XML 구문 분석에 대한 질문이 있습니다. 나는 예제 프로그램을 실험하고 있었는데 파싱이 어떻게 작동 하는지를 이해하려고 약간 수정했다. 나는 꽤 이해할 수없는 결과를 얻었고, 여러분 중 일부는 어떤 일이 벌어지고 있는지에 관해 밝힐 수 있기를 희망한다.xerces-c : DOM xml 구문 분석
이 내 XML 파일입니다
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root xmlns="http://www.test.com">
<ApplicationSettings>
<option_a>"10"</option_a>
<option_b>"24"</option_b>
</ApplicationSettings>
</root>
내가() 함수는 getChildNodes 같은 호출 할 때에 간다가 호출로 처리하는 것을 이해하려고 내 프로그램 전반에 걸쳐 디버그 문을 삽입. 이 출력은 내가받은 출력입니다.
Parsing xml file...
Processing Root...
Processing children with getChildNodes()...
>>>>>>>>>>> Loop child 0: Node name is: #text
>>>>>>>>>>> Loop child 1: Node name is: ApplicationSettings
= ApplicationSettings processing children with getChildNodes()...
***** iter 0 child name is #text
***** iter 1 child name is option_a
***** iter 2 child name is #text
***** iter 3 child name is option_b
***** iter 4 child name is #text
>>>>>>>>>>> Loop: 2 Node name is: #text
출력에서 나는 올바르게 xml 파일을 올바르게 파싱했다고 추측 할 수 있습니다. 그러나이 프로그램은 또한 # 텍스트 (getNodeName() 함수를 사용하여 출력)이라는 추가 노드를 감지했습니다. 내 질문은 무엇입니까 그 # 언급하고 왜 그들은 주기적으로 루프 전체에 나타 납니까?
감사합니다.
흥미 롭. 나는 여하튼 공백으로 다룬 느낌이 들었다. 루핑시 여분의 오버 헤드를 피할 수 있도록 이러한 공백을 자식 노드로 추가하는 것을 피할 수있는 방법이 있는지 알고 계십니까? 유일한 해결책을 파싱하고 있습니까? – user459811
@ user459811 저는 xerces에 익숙하지 않습니다. 죄송합니다. "공백 무시"와 같은 것을 찾으려면 문서를 참조해야합니다. – khachik
감사합니다 Khachik. 나는 if-conditional을 사용하여 관심있는 사람이 있으면 공백을 무시했다. if ((currentNode-> getNodeType() == DOMNode :: TEXT_NODE) || (currentNode-> getNodeType() == DOMNode :: COMMENT_NODE)) {계속; } – user459811