2015-09-06 38 views
1

我使用EXIficient將XML數據轉換爲EXI並轉換回XML。在這裏,我使用他們的EXIficientDemo class。示例代碼:缺少名稱空間信息在使用EXIficient的XML文件中

EXIficientDemo sample = new EXIficientDemo(); 
sample.parseAndProofFileLocations("FilePath"); 
sample.codeSchemaLess(); 

首先,它轉換XML文件EXI然後再返回到XML,當它生成以前生成EXI的XML文件,它就會失去大約命名空間的一些信息。

實際的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<tt xml:lang="ja" xmlns="http://www.w3.org/ns/ttml" 
xmlns:tts="http://www.w3.org/ns/ttml#styling" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<body> 
    <div> 
     <p xml:id="s1"> 
     <span tts:origin="somethings">somethings</span> 
     </p>  
    </div> 
</body> 

生成的XML文件通過EXIficient

<?xml version="1.0" encoding="UTF-8"?> 
<ns3:tt xmlns:ns3="http://www.w3.org/ns/ttml" 
xml:lang="ja"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<ns3:body><ns3:div> 
<ns3:p xml:id="s1"> 
<ns3:span xmlns:ns4="http://www.w3.org/ns/ttml#styling" 
ns4:origin="somethings">somethings</ns3:span> 
</ns3:p> 
</ns3:div></ns3:body> 

在生成的XML文件,它缺少xmlns:tts="http://www.w3.org/ns/ttml#styling"

如何修復這個問題呢?如果可以的話,請幫助我。

回答

0

EXIficient可能會抑制未使用的名稱空間。您的示例不顯示任何使用ttm名稱空間。

如您所見,它不保留ttml命名空間的名稱空間前綴(更改爲ns3)。如果ttml#metadata名稱空間未使用,則生成的XML非常有效。

更新

與更新的問題,其中的名稱空間ttml#styling使用由span元件的origin屬性,名稱空間被保持在重建XML,但它已被移動到span元件。

這仍然是一個非常有效的XML文檔。

名稱空間聲明(xmlns)可以出現在XML文檔的任何位置,並且適用於它出現的元素和所有子元素(除非被重寫,這是非常罕見的)。

相同的名稱空間可以在不同的元素上多次聲明。爲了簡化和/或優化,通常在根元素上預先聲明所有名稱空間,使用不同的前綴,但不要求這樣做。

+0

編輯的問題。請現在看看。在這裏,使用ttml#樣式,但它仍然不包括在內 –

0

我偶然讀到這個問題,不幸的是很晚了。 以防萬一,人們仍在爲此苦苦掙扎,並想知道他們能做些什麼。

正如它指出EXIficient在名稱空間處理方面表現得很好。

話雖如此,EXI規範允許保留前綴和名稱空間(請參閱Preserve Options)。

在EXIficient一個可以相應地設置這些選項, 例如,

EXIFactory.getFidelityOptions().setFidelity(FidelityOptions.FEATURE_PREFIX, true);