首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT转换和CDATA

XSLT转换和CDATA
EN

Stack Overflow用户
提问于 2016-04-28 10:40:14
回答 1查看 980关注 0票数 0

我必须使用XSLT转换我的输入xml。它包含CDATA,我需要从CDATA中提取元素,然后我必须重命名标记。

下面是我的输入xml:

代码语言:javascript
复制
 <getArtifactContentResponse>
        <return>
             <![CDATA[
       <metadata>
        <overview>        
            <name>scannapp</name>
            <developerId>developer702</developerId>
            <stateId>2</stateId>
            <serverURL>dddd</serverURL>
            <id>cspapp1103</id>
            <description>scann doc</description>
            <hostingTypeId>1</hostingTypeId>
     </overview>
    </metadata>
      ]]>
      </return>
    </getArtifactContentResponse> 

预期输出为:

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8"?>
   <metadata >
    <information>        
        <name>scannapp</name>
        <developerId>developer702</developerId>
        <stateId>2</stateId>
        <serverURL>ddddd</serverURL>
        <id>cspapp1103</id>
        <description>scann doc</description>
        <hostingTypeId>1</hostingTypeId>        
    </Information>
</metadata>

我正在使用的XSLT如下:

代码语言:javascript
复制
<xsl:output method="xml" version="1.0" encoding="UTF-8" />
<xsl:template match="/">
    <xsl:value-of select="//ns:getArtifactContentResponse/ns:return/text()" disable-output-escaping="yes"/>
</xsl:template>


<xsl:template match="overview">
     <Information>
            <xsl:apply-templates select="@* | node()" />
    </Information>
</xsl:template>

有了这个,我可以提取CDATA,但它不会将元素'overview‘重命名为'Information’。

转换后的xml如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

   <metadata>
    <overview>        
        <name>scannapp</name>
        <developerId>developer702</developerId>
        <stateId>2</stateId>
        <serverURL>dddddd</serverURL>
        <id>cspapp1103</id>
        <description>scann doc</description>
        <hostingTypeId>1</hostingTypeId>        
    </overview>
</metadata>

有人能告诉我如何在提取CDATA后重命名标签吗?我不明白我在这里错过了什么?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2016-04-28 18:16:21

CDATA中没有元素,只有文本。这就是CDATA的意思:“这个东西可能看起来像标记,但我希望它被视为文本”。

将文本转换为元素称为解析,因此要从CDATA中的文本中提取元素,您必须对其进行解析。在XSLT 3.0 (它有一个parse-xml()函数)之前,没有直接的方法可以在XSLT中做到这一点。一些XSLT处理程序有一个扩展函数来做这件事;在一些(我相信) exslt:node-set()函数中,如果您提供一个字符串作为输入,就可以做这件事。对于其他代码,您可以调用您自己的Java或Javascript代码来执行解析。所以这一切都变得依赖于处理器。

另一种方法是使用禁用-输出-转义技巧在CDATA节中输出XML,然后在第二个转换中处理它。

最好的方法是在开始之前去掉CDATA标签。他们从一开始就不应该被放在那里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36904308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档