当前位置: 首页 > 知识库问答 >
问题:

基于XSLT1.0的CDATA内容提取

太叔富
2023-03-14
    ?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
    <process id="10" name="Process 1" ownerOE="OE1" accountableOE="accounttableOE1" lastUpdate="" delete="aktiv">
         <description>
            <![CDATA[Some description 1]]>
         </description>              
         <App name="App1" ic-id="100" />
    </process>
    
    <process id="20" name="Process 2" ownerOE="OE2" accountableOE="accounttableOE2" lastUpdate="" delete="aktiv">
         <description>
            <![CDATA[Some description 2]]>
         </description>              
         <App name="App1" ic-id="100" />
    </process>
</root>
   <?xml version='1.0' ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output omit-xml-declaration="yes" indent="yes"/>
        <xsl:template match="/">
        <ImportSchemaBase>
                <xsl:for-each select="root/process">
                    <Process>
                        <Title>
                            <xsl:value-of select="@name"/>
                        </Title>
                         <Description>
                            <xsl:value-of select="@description"/>
                        </Description>
                        <Tech_ID>
                            <xsl:value-of select="@id"/>
                        </Tech_ID>
                        <lastUpdate>
                            <xsl:value-of select="@lastUpdate"/>
                        </lastUpdate>
                        <deleteFlag>
                            <xsl:value-of select="@delete"/>
                        </deleteFlag>
                    </Process>
                </xsl:for-each>
        </ImportSchemaBase>
        </xsl:template>
</xsl:stylesheet>

当前输出:

<ImportSchemaBase>
   <Process>
      <Title>Process 1</Title>
      <Description/>
      <Tech_ID>10</Tech_ID>
      <lastUpdate/>
      <deleteFlag/>
   </Process>
   <Process>
      <Title>Process 2</Title>
      <Description/>
      <Tech_ID>20</Tech_ID>
      <lastUpdate/>
      <deleteFlag/>
   </Process>
</ImportSchemaBase>

所需的输出是(将提取的内容从CDATA中取出):

   <ImportSchemaBase>
       <Process>
          <Title>Process 1</Title>
          <Description>Some description 1</Description>
          <Tech_ID>10</Tech_ID>
          <lastUpdate/>
          <deleteFlag/>
       </Process>
       <Process>
          <Title>Process 2</Title>
          <Description>Some description 2</Description>
          <Tech_ID>20</Tech_ID>
          <lastUpdate/>
          <deleteFlag/>
       </Process>
    </ImportSchemaBase>

我也尝试了“text()”匹配模式,但它不起作用,我阅读了不同的答案并尝试了它们的方法:

我需要使用XSLT1.0。

感谢您的帮助,并向您致意

共有1个答案

段干弘毅
2023-03-14

在XML中,descriptionprocess的子元素,而不是属性。要获得它的字符串值,必须更改:

<xsl:value-of select="@description"/>

致:

<xsl:value-of select="description"/>

或者也许:

<xsl:value-of select="normalize-space(description)"/>
 类似资料:
  • 我想使用xslt转换一些xml文件,但遇到了一个大问题。 在我的输入文件中,我有CDATA标记,它包含xml子树-S,应该复制到输出标记中。我们知道关于这些CDATA标记的一些信息: 我的xsl如下所示: 这样做的输出将是: 注意:如果您在eclipse中测试这个示例,它可以工作( 不会为空),但是xsl:value-of select应该只在元素中工作!因此,在message broker中,它

  • 问题内容: 我想对包含特定单词的所有锚应用不同的样式。可以在纯CSS中完成吗?如果仅CSS3,也可以。 问题答案: 编号曾经被提议过,但不在CSS3选择器的当前工作草案中。 您将需要一些JavaScript,例如:

  • 我正在尝试在最新版本的 Spring Cloud 流中使用基于内容的路由。根据这份文件 - 这是我用StreamListener编写的代码 通过使用该条件,可以将消息路由到两个不同的函数。 我正试图用如下的功能接口方法来消费消息。 如何在函数中实现类似的基于内容的路由?蒂亚。 其他细节- Spring引导版本 - 2.3.12.发布 Spring云版 - Hoxton.SR11

  • 我使用的是confluent,所以我已经根据confluent文档使用Connect.Properties中的confluent-hub安装了dibezium连接器 我需要使用io.debezium.transforms.contentbasedrouter https://debezium.io/documentation/reference/1.3/configuration/content-

  • 我正在开发一个wordpress插件。我使用两种不同的自定义帖子类型,球员和球队。 玩家有相关的元字段:名字、姓氏和团队。 团队有相关的团队名称元字段。 在编辑一个特定的团队帖子时,我试图将当前拥有该团队名称的所有球员的数组发布到他们的元字段中以获取团队名称。我不知道怎么做。任何帮助或文章都会很有帮助。谢啦

  • Swift 是一门全新的用于开发 iOS, OS X 以及 watchOS 应用的编程语言。不过,如果你有 C 或者Objective-C 语言开发经验的话,Swift 的许多地方都会让你感到熟悉。 Swift 为所有 C 和 Objective-C 的类型提供了自己的版本,包括整型值的 Int ,浮点数值的 Double 和 Float ,布尔量值的 Bool ,字符串值的 String 。如同