2010-07-08 3 views
2

XOM을 사용하여 Java에서 XML 문서를 작성합니다.XOM으로 첫 번째 태그에만 네임 스페이스를 설정하는 방법은 무엇입니까?

나는 간단한 XML 문서를 만들었고 나는 XML 네임 스페이스를 원한다. 그러나 첫 번째 태그에 네임 스페이스를 설정하면 xmlns=""과 같이 자식에 빈 네임 스페이스가 설정됩니다.이 동작을 제거하려면 어떻게해야합니까? 첫 번째 태그에만 xmlns이 필요합니다.

나는이 XML 원하는 :

<request xmlns="http://my-namespace"> 
    <type>Test</type> 
    <data> 
     <myData>test data</myData> 
    </data> 
</request> 

을하지만이 내 자바 XOM 코드 XOM

<request xmlns="http://my-namespace"> 
    <type xmlns="">Test</type> 
    <data xmlns=""> 
     <myData>test data</myData> 
    </data> 
</request> 

에서 XML 문서 출력 : 이것은 나를 위해 작동

String namespace = "http://my-namespace"; 
Element request = new Element("request", namespace); 

Element type = new Element("type"); 
type.appendChild("Test"); 

request.appendChild(type); 

Element data = new Element("data"); 
request.appendChild(data); 

Element myData = new Element("myData"); 
myData.appendChild("test data"); 
data.appendChild(myData); 

Document doc = new Document(request); 
doc.toXML(); 

답변

8

. 그러나 나는 왜 Element 개체가 부모의 네임 스페이스를 상속받지 못하는 이유에 대해 의아해합니다. (가 아닌 경우 XML이나 XOM 전문가)

코드 :

String namespace = "http://my-namespace"; 
Element request = new Element("request", namespace); 

Element type = new Element("type", namespace); 
type.appendChild("Test"); 

request.appendChild(type); 

Element data = new Element("data", namespace); 
request.appendChild(data); 

Element myData = new Element("myData", namespace); 
myData.appendChild("test data"); 
data.appendChild(myData); 

Document doc = new Document(request); 
System.out.println(doc.toXML()); 

출력 :

<?xml version="1.0"?> 
<request xmlns="http://my-namespace"> 
    <type>Test</type> 
    <data> 
    <myData>test data</myData> 
    </data> 
</request> 
+2

javadoc 요소 (문자열) "네임 스페이스에 새 요소를 만듭니다." –

2

내가 같은 문제로 달리고, 구글은 여기에 저를지도한다.

@Michael - 그건 javadoc에서 말하는 것입니다. 그렇습니다.하지만 불행하게도, 구현할 때 작동하지 않습니다. Catchwa 구현을하지 않는 한 하위 요소는 계속 xmlns 특성을 갖게됩니다.

Catchwa의 구현은 정상적으로 작동합니다. 네임 스페이스를 갖도록 지시 한 요소에만 네임 스페이스가 있습니다. 모든 비어있는 xmlns 속성이 없어졌습니다. 이상합니다.

버그입니까? 나는 그 부분을 알아낼 수 없다. 또는 XOM이 작동하는 방식입니까?

+0

네임 스페이스가 빈 문자열로 설정되지 않았습니까?이 요소는 첫 번째로 선언 된 네임 스페이스에서 상속되어야 함을 의미합니까? –

1

네임 스페이스 및 네임 스페이스 선언을 혼동하지 마십시오. 네임 스페이스는 각 요소의 고유 한 속성입니다. 네임 스페이스 선언은`xmlns '속성이다. 그들은 연결되어 있지만 그들은 같은 것이 아닙니다. 요소를 만들 때 네임 스페이스 선언이 아닌 네임 스페이스를 설정합니다.

XOM 데이터 모델에서 네임 스페이스는 특성이 아닙니다. 그것들은 요소 그 자체의 고유 한 특성입니다. 엘리먼트의 자식이 부모와 같은 네임 스페이스에 있어야한다는 규칙은 XML에 없다. 사실 이론적으로 문서의 모든 요소는 다른 네임 스페이스에있을 수 있습니다.

XOM에서는 로컬 이름을 지정하는 동시에 요소 나 속성의 네임 스페이스를 지정합니다. 요소를 만들 때 요소는 초기에는 부모가 없기 때문에 XOM이 부모와 동일한 네임 스페이스를 기본으로 제공 할 방법이 없습니다. 원하는 경우에도 마찬가지입니다.

문서가 serialize 될 때 네임 스페이스는 xmlnsxmlns:*prefix* 특성으로 표시됩니다. XOM은 각 요소에 할당 한 네임 스페이스와 일치하도록이 요소를 어디에 둘 것인지를 결정합니다. 코드의 각 요소에 대해 원하는 네임 스페이스를 지정하고 XOM에서 네임 스페이스 선언을 넣을 위치를 파악하도록합니다.

관련 문제