2017-11-30 1 views
0

다음은java를 사용하여 xml의 특정 태그 내에 하위 노드를 가져 오는 방법은 무엇입니까?

<dataroot> 
<PARM> 
    <P1>123</P1> 
    <P2>abc</P2> 
</PARM> 
<PARM> 
    <P1>456</P1> 
    <P2>def</P2> 
</PARM> 
<PARM> 
    <P1>789</P1> 
    <P2>ghi</P2> 
</PARM> 
.......(15times) 
</dataroot> 

내 목표는 자식 노드를 얻을 수 (즉, P1, P2되지 내부의 값)과 템플릿으로 그 이름을 비교하는 것이다 .. 내가 구문 분석해야하는 XML 파일입니다.

p2가없는 경우 해당 특정 태그를 xml 파일의 특정 위치에 추가해야한다고 말하십시오. 문제는 내가 getElementsByTagNames()을 사용하여 어레이에 저장 한 다음 데이터 루트PARM을 포함하는 템플릿과 비교할 때 내가 원하지 않는 것입니다.

그래서 어떻게하면 p1과 p2 (최대 15 시간) 만 얻을 수 있습니까?

+0

왜 "특정 태그를 특정 위치에 추가 하시겠습니까?" 너는 가치가 없다, 그렇지? 그러면 빈 요소의 목적은 무엇입니까? – laune

+0

첫 번째 PARM 섹션에서 p1이 누락 된 경우 해당 섹션에 p1을 추가하려고한다고 가정합니다. 값은 0 또는 아무것도 될 수 있습니다. – Prodigy

답변

0

나에게있어서 가장 간단한 방법은 JAXB를 사용하여 언 마샬하고 마샬링하여 PARM의 누락 된 요소를 추가하는 것입니다. datarootPARM의 클래스에 몇 가지 주석을 추가해야합니다. XML 요소 이름에 대소 문자가 필요하지만 언 마샬링 및 마샬링을위한 몇 줄의 코드가 필요합니다.

같은 패키지에서
@XmlRootElement(name="dataroot") 
@XmlType(propOrder = {"parm"}) 
public class Data { 
    @XmlElement(name="PARM") 
    private List<Parm> parm = new ArrayList<>(); 
    public List<Parm> getParm(){ return parm; } 
} 

@XmlRootElement(name="PARM") 
public class Parm { 
    private String p1=""; 
    @XmlElement(name="P1") 
    public String getP1(){ return p1; } 
    public void setP1(String v){ p1 = v; } 
} 

, 한 줄이 포함 된 파일 jaxb.index을 추가

Data 

주요 프로그램 :

JAXBContext jc = JAXBContext.newInstance(PACKAGE); // dir path 
Unmarshaller u = jc.createUnmarshaller(); 
Data data = (Data)u.unmarshal(new File(XMLIN)); // file path 
Marshaller m = jc.createMarshaller(); 
Writer sw = ...;     // whatever you need 
m.marshal(data, sw); 

참고 필드 p1에 대한 초기화를. 이렇게하면 요소가 빈 문자열로 표시됩니다. null의 경우, 요소는 생략됩니다.

+0

이것은 너무 많을 수 있지만 완전한 코드 또는 완전한 예제를 제공 할 수 있습니다. 왜냐하면 이것은 나를 위해 약간 복잡하기 때문입니다. 고맙습니다. – Prodigy

+0

이것은 import 문, PACKAGE 및 XMLIN에 대한 할당 및'main' 메소드 래퍼를 제외한 완전한 코드입니다. 확실하게 추가 할 수 있습니까? – laune

+0

고맙습니다. .. – Prodigy

관련 문제