【发布时间】:2018-05-29 13:43:53
【问题描述】:
我用 xerces-c 3.2.1 写了一个 xml 文件,看起来像
<?xml version="1.0" encoding="UTF-16" standalone="yes" ?>
<Test xmlns="my_namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="my_namespace myschema.xsd">
<Elem />
</Test>
使用我自己的默认命名空间以及声明的 xml 和 xsi 命名空间。
在我的命名空间中,我有一个名为 dim 的属性,它需要一个命名空间声明,否则它会与预先存在的 xml:dim 混淆。
当我设置这个属性时
elem->setAttributeNS("my_namespace", "myprefix:dim", data);
那么我的xml文件看起来像
<?xml version="1.0" encoding="UTF-16" standalone="yes" ?>
<Test xmlns="my_namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="my_namespace myschema.xsd">
<Elem xmlns:myprefix="my_namespace" myprefix:dim="..."/>
</Test>
我写的每个使用 dim 属性的元素都带有 命名空间声明,这很糟糕,因为出于文件大小的原因,我想要 xerces-c像
这样写文件(金色的)
<Test xmlns="my_namespace"
xmlns:myprefix="my_namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="my_namespace myschema.xsd">
<Elem myprefix:dim="..."/>
</Test>
在根节点处带有命名空间前缀声明。但是如果我使用root->setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:myprefix", "my_namespace");向根节点添加这样一个条目
然后 xerces-c 生成像这样的 xml 文件
<Test xmlns="my_namespace"
xmlns:myprefix="my_namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="my_namespace myschema.xsd">
<myprefix:Elem1 ../>
<myprefix:Elem2 ../>
<Elem myprefix:dim="..."/>
</Test>
为所有其他元素添加前缀myprefix:elem1,myprefix:elem2,除了带有我的dim的元素,这是脖子痛...
我如何强制 xerces-c 写出最少数量的命名空间声明和前缀,就像 golden one 一样??
【问题讨论】: