2012-06-12 3 views
0

문자열을 DOM으로 변환 한 다음 DOM 객체에서 javax.xml.xpath.XPathFactory를 사용하여 데이터를 가져 오는 기능이 있습니다.자바에서 DOM에 문자열 (공백으로)

된 XPathFactory는 다음 문자열

<root><test><name>A</name></test><test><name>B</name></test></root>

을 위해 잘 작동하지만 난 값 준비에 XPathFactory를 사용하고 태그

<root> <test> <name>A</name> </test> <test> <name>B</name> </test></root>

사이에 공백이있는 경우는 "A 실패 "및"B "DOM에서.

문자열이 태그 사이에 공백이있을 때 XpathFactory가 실패하는 이유는 누구에게 말해 줄 수 있습니까?

감사
--SD

+0

구체적으로 XPathFactory가 실패했다고 생각하는 이유는 무엇입니까? 어쩌면 적절한 XPath 표현식을 작성하는 법을 묻는 것입니까? – goat

+0

@Rambo : 네 적절한 XPath 표현식을 공식화하는 방법 (입력 XML이 태그 사이에 공백이 있고 DOM으로 변환되는 문자열 인 경우) – SDS

답변

0

는 XPath가 정확하고 작품을 좋아, 문제는 그게라고 생각합니다

list.item(i).getChildNodes().item(0).getTextContent()); 

는 공백없이 XML의 경우에 <name> 소자 반면 공간과 XML의 경우 오른쪽 <employee> 후의 공간 즉, XPath를 일치하는 노드의 제 1 자식 노드를 얻는다. 제 employee 요소의 자식 노드가 공백 인 경우에 다른 단어 (라인 당 하나)에서

:

<name> . . . </name> 
<company-no> . . . </company-no> 
<chunk-id> . . .</chunk-id> 

하고 : 공간이없는 경우

[spaces] 
<name> . . . </name> 
[spaces] 
<company-no> . . . </company-no> 
[spaces] 
<chunk-id> . . .</chunk-id> 

그들이있다 첫 번째 경우에 필요한 자식 노드는 1, 3 및 5이고 두 번째 경우는 0, 1 및 2입니다.

이 코드를 수정해야한다고 생각합니다.

System.out.println("Name: " +list.item(i).getChildNodes().item(0).getTextContent()); 
System.out.println("Company: "+list.item(i).getChildNodes().item(1).getTextContent()); 
System.out.println("Chunk: "+list.item(i).getChildNodes().item(2).getTextContent()); 

다른 XPath를 사용하여 이름, 회사 및 청크 하위 노드를 가져 오거나 공백이 포함 된 하위 노드를 건너 뛸 수 있습니다.

+0

감사합니다. 알고 계십니까? builder.parse()가 어떻게 작동합니까? 36 행 http://tyone.com/y5WKx 여기를 참조하십시오 그것은 XML 태그로 공간/탭을 고려하고 그들을 생략뿐만 아니라 그들을 해석 믿습니다. 틀 렸으면 고쳐줘. – SDS

+0

'builder.parse()'가 어떻게 작동하는지 알지 못하지만, 일반적으로 XML 파서는 이런 식으로 동작해야합니다 : 파스 된 XML에서도 공백을위한 노드를 생성하십시오 - 내 답변에 쓴 것처럼 방법은 XPath의 결과를 사용/처리합니다. – MiMo

0
/root/test/name 

또는 단지

//name 

선택적으로, 직접 얻을 자식 텍스트 노드

//name/text() 
+0

내가 작성한 XPath 표현식이 다른 페이지에 있다고 생각합니다. . 문제는 문자열 2에 표시된대로 태그 사이의 공백이 올바른 결과를 생성하지 않는다는 것입니다. 공백이 필요한 결과를 생성하지 않습니다. – SDS

+0

http://sscce.org/ http://ideone.com/ – goat

+0

코드를 더 일찍 제공하지 않아서 죄송합니다. 여기 http : // ideone을 방문하십시오.com/ocvA1 입력 문자열 emp에 태그 사이에 공백이 있으면이를 생략하면 올바른 값이 인쇄됩니다. – SDS