Oracle 11.2
下面是XMLQuery我在XMLType列上运行的减少版本.当我运行查询,简单地分析,并重新创建存储XML,则不需要的默认和妾的命名空间插入到了父代的子元素.请注意,tsxm名称空间不会被插入,这是因为它不等于默认名称空间这个查询什么也不做,可以轻松地重写,但真正的(更大)查询使用相同的方法,所以这就是为什么我是以这种格式发布问题.
创建表:
CREATE TABLE XML_DOCUMENT_TMP
(
DOCUMENT_ID NUMBER(12) NOT NULL,
XML_DATA SYS.XMLTYPE NOT NULL,
CREATED_DATE TIMESTAMP(6) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
插入一些数据(必须按原样配置名称空间):
insert into XML_DOCUMENT_TMP
(document_id,created_date,xml_data)
values(1,sysdate,
'<patent xmlns="http://schemas.thomson.com/ts/20041221/tsip"
xmlns:tsip="http://schemas.thomson.com/ts/20041221/tsip"
xmlns:tsxm="http://schemas.thomson.com/ts/20041221/tsxm"
tsip:action="replace" tsip:cc="CA" tsip:se="2715340" tsip:ki="C">
<accessions tsip:action="replace">
<accession tsip:src="wila" tsip:type="key">CA-2715340-C</accession>
<accession tsip:src="tscm" tsip:type="tscmKey">CA-2715340-C-20150804</accession>
</accessions>
<claimed tsip:action="replace">
< claimsTsxm tsip:lang="en">
<tsxm:heading tsxm:align="left">We Claim:</tsxm:heading>
<claimTsxm tsip:no="1" tsxm:num="1" tsip:type="main">1. power. </claimTsxm>
</claimsTsxm>
</claimed>
</patent>
');
Run Code Online (Sandbox Code Playgroud)
运行XMLQuery:
WITH tmpTable …Run Code Online (Sandbox Code Playgroud) 编写一些代码从 XML 中提取一些值,XPath 的结果似乎添加\n在内容之后。
#include <QCoreApplication>
#include <QXmlQuery>
#include <QString>
#include <QDebug>
auto main(int argn, char* argc[])->int
{
QCoreApplication app(argn, argc);
QString replyContent="<Root isOk='ok'/>";
QXmlQuery query;
query.setFocus(replyContent);
query.setQuery("string(//@isOk)");
// Attribute seem to add \n
QString queryResult;
if (query.evaluateTo(&queryResult))
{
qDebug() << queryResult; // Where this \n come from?
qDebug() << queryResult.size(); // Why 3? shouldn't be 2?
}
}
Run Code Online (Sandbox Code Playgroud)
预期结果:
“好的”
2
给出的结果:
“好的\n”
3
这显然有一些我想避免的副作用。
为什么要\n添加这个?以及如何解决呢?