1

我正在使用EXIficient将 XML 数据转换为 EXI 并返回 XML。在这里,我使用他们的EXIficientDemo 类。示例代码:

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

首先它将 xml 文件转换为 EXI,然后再转换回 XML,当它从先前生成的 EXI 文件生成 XML 时,它会丢失一些有关 Namespace 的信息。

实际 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"

如何解决这个问题?如果可以,请帮助我。

4

2 回答 2

0

EXIficient 可能会抑制未使用的命名空间。ttm您的示例未显示名称空间的任何使用。

如您所见,它也没有保留命名空间的命名空间前缀ttml(更改为ns3)。ttml#metadata如果名称空间未使用,则生成的 XML 完全有效。

更新

在更新后的问题中,元素的属性ttml#styling使用了命名空间,命名空间保留在重建的 XML 中,但已移至元素。originspanspan

这仍然是一个非常有效的 XML 文档。

命名空间声明 ( xmlns) 可以出现在 XML 文档中的任何位置,并适用于它出现的元素和所有子元素(除非被覆盖,这是非常不寻常的)。

可以在不同的元素上多次声明相同的命名空间。为了简单和/或优化,通常在根元素上预先声明所有命名空间,使用不同的前缀,但不是必须这样做。

于 2015-09-06T08:14:11.220 回答
0

我偶然读到了这个问题,不幸的是相当晚了。以防万一人们仍在为此苦苦挣扎,想知道他们能做什么。

正如有人指出的那样,EXIficient 在命名空间处理方面表现得很好。

话虽如此,EXI 规范允许保留前缀和命名空间(参见Preserve Options)。

在 EXIficient 中,可以相应地设置这些选项,例如,

EXIFactory.getFidelityOptions().setFidelity(FidelityOptions.FEATURE_PREFIX, true);
于 2016-12-12T14:44:33.693 回答