【发布时间】:2014-05-13 15:22:36
【问题描述】:
我有一个很大的 xml 文件,其中文件的一部分具有以下结构:
如何使用 XSLT 将 xml 元素中的所有“abc...”替换为“xyz...”?
基本条件是:
- xml - 1.0 版
- 没有 EXSLT,没有 Java
- 仅对节点的子节点进行替换:“base.data.row”
- 我将使用 C++ 中的 XalanTransformer 进行转换
我现在得到的只是 XSLT 中的身份转换,现在我正在寻找一种方法来替换节点“base.data.row”的子节点的名称。 但我不知道怎么做。
这里是xml:
<?xml version="1.0" encoding="utf-8"?>
<base>
<data>
<row type="">
<abc_dimension />
<abc_weight />
<numOf />
<abcValues>
<val1 />
<val2 />
</abcValues>
<graph />
</row>
<row type="">
<abc_dimension />
<abc_weight />
<numOf />
<abcValues>
<val1 />
<val2 />
</abcValues>
<graph />
</row>
<row type="">
<abc_dimension />
<abc_weight />
<numOf />
<abcValues>
<val1 />
<val2 />
</abcValues>
<graph />
</row>
</data>
</base>
我在这里 (http://xslttest.appspot.com/) 尝试了“michael.hor257k”的 xslt,它成功了! 但是当我在 C++ 中将它与 XalanTransformer 一起使用时,它只返回 xml 节点的值。 我使用 XalanTransformer 的方式如下:
XALAN_USING_XERCES( XMLPlatformUtils );
XALAN_USING_XALAN( XalanTransformer );
XMLPlatformUtils::Initialize();
XalanTransformer::initialize();
const char* xmlIn = "origXML.xml";
const char* xslIn = "transformation_template.xslt"; //the xslt of michael.hor257k
const char* xmlOut = "origXMLTransformed-out.xml"; //returns only the values of the xml nodes
XalanTransformer theXalanTransformer;
int a_errNumber = theXalanTransformer.transform( xmlIn, xslIn, xmlOut );
XalanTransformer::terminate();
XMLPlatformUtils::Terminate();
XalanTransformer::ICUCleanUp();
已修复,好像哪里有错别字。 好像 XalanTransformer 使用了默认的模板规则,这将导致输出整个源文档中的所有文本节点。
【问题讨论】:
-
考虑将您拥有的 XML 作为代码示例发布,以及该示例所需的输出。您想替换元素或属性名称中的
abc,还是替换元素或属性内容中的abc?