我正在使用EXIficient将XML数据转换为EXI,然后再转换回XML。在这里,我使用他们的EXIficientDemo class。示例代码:
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>由EXIficient生成的XML文件
<?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"
如何解决这个问题?如果可以,请帮帮我。
发布于 2015-09-06 16:14:11
EXIficient可能会抑制未使用的命名空间。您的示例没有显示ttm名称空间的任何用法。
如您所见,它也没有保留ttml名称空间的名称空间前缀(更改为ns3)。如果未使用ttml#metadata名称空间,则生成的XML是完全有效的。
更新
对于更新后的问题,名称空间ttml#styling由span元素的origin属性使用,名称空间保留在重新构建的span中,但已移动到span元素。
这仍然是一个非常有效的XML文档。
名称空间声明(xmlns)可以出现在XML文档中的任何位置,并应用于出现它的元素和所有子元素(除非被覆盖,这是非常罕见的)。
可以在不同的元素上多次声明相同的命名空间。为了简单和/或优化,通常使用不同的前缀在根元素上预先声明所有名称空间,但这并不是必需的。
发布于 2016-12-12 22:44:34
我无意中读到了这个问题,不幸的是,我读得很晚。以防人们仍在为此而苦苦挣扎,并想知道他们能做些什么。
正如前面所指出的,EXIficient在名称空间处理方面表现得很好。
话虽如此,EXI规范允许保留前缀和名称空间(参见Preserve Options)。
在EXIficient中,人们可以相应地设置这些选项,例如,
EXIFactory.getFidelityOptions().setFidelity(FidelityOptions.FEATURE_PREFIX, true);https://stackoverflow.com/questions/32421203
复制相似问题