如何让 xerces-c 以最小的开销编写名称空间?
How to get xerces-c to write namespaces with minimum size overhead?
我用 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 的属性,它需要一个命名空间声明,否则它会与预先存在的 [=60= 混淆]:昏暗。
当我设置这个属性时
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>
prefixing all other elements myprefix:elem1, myprefix:elem2, 除了一个我的 dim,脖子痛...
我如何强制 xerces-c 按照我的意愿编写最少量的名称空间声明和前缀,就像 the golden one ??
最终获得黄金的诀窍是:
到将前缀添加到元素名称(或属性名称),例如L"my_prefix:Elem"(除了名字space)
DOMElement * e4 = doc->createElementNS(defaultNS, (const XMLCh*)L"my_prefix:Elem");
root->appendChild(e4);
这会将 space 保存在 生成的 XML 文件中,但需要 更多 space 在生成 XML 的代码中 :( 并且需要更多代码,因为不应对前缀进行硬编码..
我用 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 的属性,它需要一个命名空间声明,否则它会与预先存在的 [=60= 混淆]:昏暗。
当我设置这个属性时
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>
prefixing all other elements myprefix:elem1, myprefix:elem2, 除了一个我的 dim,脖子痛...
我如何强制 xerces-c 按照我的意愿编写最少量的名称空间声明和前缀,就像 the golden one ??
最终获得黄金的诀窍是:
到将前缀添加到元素名称(或属性名称),例如L"my_prefix:Elem"(除了名字space)
DOMElement * e4 = doc->createElementNS(defaultNS, (const XMLCh*)L"my_prefix:Elem");
root->appendChild(e4);
这会将 space 保存在 生成的 XML 文件中,但需要 更多 space 在生成 XML 的代码中 :( 并且需要更多代码,因为不应对前缀进行硬编码..