JDOM은 이미 네임 스페이스에있는 다른 요소에 자식 요소를 추가하는 경우에만 xmlns=""
을 추가합니다. XML의 기본 네임 스페이스는 접두사가없는 네임 스페이스입니다. 다음 예제에서 :
<root>
<child />
</root>
기본 접두사가없고 기본 네임 스페이스는 ""입니다.
위의 XML 조각
는 의미 상 동일 다음
xmlns=""
의미
<root xmlns="" >
<child />
</root>
, 당신이 당신이 '빈'공간 ""에 넣어해야, 접두사가없는 요소를 볼 수있는 시간입니다. 위의 예에서 루트와 자식 요소가 네임 스페이스 http://mynamespace
에 있는지
<ns:root xmlns:ns="http://mynamespace">
<ns:child />
</ns:root>
참고하고 : 네임 스페이스에 물건을 넣어 접두어를 갖고 싶어 이제
, 당신은 할 것 해당 네임 스페이스의 접두어는 ns
입니다. http://mynamespace
되도록 상기 예에서
<root xmlns="http://mynamespace">
<child />
</root>
디폴트 네임 "가"로 변경되어, 현재 프리픽스가없는 요소가에있다 (동일한 의미 등을 갖는다)에 상기 코드는 의미 적으로 동일한 것 기본 네임 스페이스 http://mynamespace
. 반복하려면 다음 두 문서는 동일합니다 :
<ns:root xmlns:ns="http://mynamespace">
<ns:child />
</ns:root>
지금
<root xmlns="http://mynamespace">
<child />
</root>
는, 어떤이 모든 문제와 무슨 상관 이죠?
글쎄, 요소 persistenceUnitEl
은 ""이 아닌 기본 네임 스페이스에 있어야합니다. PersistenceUnit
네임 스페이스 ...something....
에, 위의에서
<tagname xmlns="...something....">
<PersistenceUnit>
</PersistenceUnit>
</tagname>
: 어딘가에 해당 요소에, 또는 그것의 부모에, 당신은 같은 것을 가지고있다. 지금, 당신은 문서에 요소 new Element("class")
을 추가 JDOM을 요구하고있다, 그래서 당신은 점점 : 당신이 ""네임 스페이스 (Namespace.NO_NAMESPACE)에 넣어 JDOM을 말하고 있기 때문에
<tagname xmlns="...something....">
<PersistenceUnit>
<class xmlns="" />
</PersistenceUnit>
</tagname>
이유입니다. JDOM에 대한 설명서는 new Element(String name)
을 참조하십시오.
대신에, 당신이 원하는 무엇을, 부모와 같은 공간에 넣어된다
Namespace parentNamespace = persistenceUnitEl.getNamespace();
persistenceUnitEl.add(new Element("class", parentNamespace).addContent(className));
이제 진짜 질문은 "클래스"요소가 실제로 같은 네임 스페이스에 속하는지 여부입니다 부모 또는 아닙니다. 그러나 그것은 당신이 대답 할 수있는 질문입니다.
자원 :
감사합니다. 당신의 설명은 네임 스페이스가 어떻게 작동 하는지를 이해하는 데 도움이되었습니다. – AngelAvila
이 답변은 정답으로 받아 들여 져야합니다 (3 년 후에도). – KLiFF