2011-07-18 4 views
2

source.xml을 네임 스페이스로 결심 할 수 없습니다XMLStreamWriter.writeStartElement (접두사, localName를, 이름 공간 URI)는 접두사 "매니페스트는"URI

내가 source.xml 파일을 읽고 어떤 행동을 한 다음에 쓰기 javax.xml.stream.XMLStreamReader를 사용
<?xml version="1.0" encoding="UTF-8"?> 
<zip:archive xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" xmlns:zip="com.test.zip"> 
<zip:entry zip:target="test1.xml"><manifest:manifest>aaa</manifest:manifest></zip:entry> 
<zip:entry zip:target="test2.xml">.......</zip:entry> 
</zip:archive> 

디스크의 속성 값은 zip:target입니다.

결과 파일, test1.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<manifest:manifest>aaa</manifest:manifest> 

당신은 알고있다, 그것은 잘못된 것입니다. 접두사 "매니페스트"는 네임 스페이스 URI로 해석 될 수 없습니다.

디버깅을 통해 다음 명령문이 성공적으로 호출되었음을 발견했습니다.

XMLStreamWriter.writeStartElement("manifest", "manifest", "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"); 

writeStartElement의 세 번째 매개 변수가 null이 아닙니다. 하지만 결과 파일에 네임 스페이스가 누락 된 이유는 무엇입니까?

  1. 설정 sRepairingNamespaces가, 네임 스페이스가 다시 선언했다
  2. 추가 writeNamespace writeStartElement

그러나 새로운 문제가 온 후 사실과 복제 할 :

나는 두 가지 방법을 시도했다.

+0

sRepairingNamespaces를 true로 설정하면 새 문제가 발생하고 네임 스페이스가 다시 선언되고 복제됩니다. – guhai

+0

URI를 접두어에 바인딩하기 위해'NamespaceContext' 구현을'XMLStreamWrite'r에 제공 했습니까? –

답변

0

writeStartElement 전에 setPrefix가 필요하다고 생각합니다. 나는 당신이 sRepairingNamespaces를 필요로 할 것이라고 생각하지 않는다 - 그러나 나는 확실하지 않다.

+0

작동하지 않습니다! 이 질문의 특별한 점은 xml 파일을 여러 xml 파일로 나누고 네임 스페이스가 루트 노드에 있다는 것입니다. – guhai