根据分隔符将特定元素属性拆分为多行

2024-07-03

我正在尝试转换 XML 并根据以下逗号将第三个 App_Data 元素值拆分为多个重复行:

    <Metadata>
        <App_Data App="VOD" Name="Run_Time" Value="01:30:57"/>
        <App_Data App="VOD" Name="Year" Value="2016"/>
        <App_Data App="VOD" Name="Category" Value="2330, 2470, 1373"/>
    </Metadata>

看起来就像这样:

    <Metadata>
        <App_Data App="VOD" Name="Run_Time" Value="01:30:57"/>
        <App_Data App="VOD" Name="Year" Value="2016"/>
        <App_Data App="VOD" Name="Category" Value="2330"/>
        <App_Data App="VOD" Name="Category" Value="2470"/>
        <App_Data App="VOD" Name="Category" Value="1373"/>
    </Metadata>

请帮忙。

Thanks!


它只在我需要时将属性放入子元素 属性

实际上,您的示例表明您确实需要每个标记都有一个元素。

试试这样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="App_Data[@Name='Category']">
    <xsl:call-template name="tokenize">
        <xsl:with-param name="text" select="@Value"/>
    </xsl:call-template>
</xsl:template>

<xsl:template name="tokenize">
    <xsl:param name="text"/>
    <xsl:param name="delimiter" select="', '"/>
        <xsl:variable name="token" select="substring-before(concat($text, $delimiter), $delimiter)" />
        <xsl:if test="$token">
            <App_Data App="{@App}" Name="Category" Value="{$token}"/>
        </xsl:if>
        <xsl:if test="contains($text, $delimiter)">
            <!-- recursive call -->
            <xsl:call-template name="tokenize">
                <xsl:with-param name="text" select="substring-after($text, $delimiter)"/>
            </xsl:call-template>
        </xsl:if>
</xsl:template>

</xsl:stylesheet>

或者,如果您更喜欢较短(但不可重复使用)的版本:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="App_Data[@Name='Category']" name="tokenize">
    <xsl:param name="text" select="@Value"/>
    <xsl:param name="delimiter" select="', '"/>
        <xsl:variable name="token" select="substring-before(concat($text, $delimiter), $delimiter)" />
        <xsl:if test="$token">
            <App_Data App="{@App}" Name="Category" Value="{$token}"/>
        </xsl:if>
        <xsl:if test="contains($text, $delimiter)">
            <!-- recursive call -->
            <xsl:call-template name="tokenize">
                <xsl:with-param name="text" select="substring-after($text, $delimiter)"/>
            </xsl:call-template>
        </xsl:if>
</xsl:template>

</xsl:stylesheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据分隔符将特定元素属性拆分为多行 的相关文章

随机推荐

  • 除非我在其中放入 printf 语句,否则代码会崩溃

    这是我正在使用的数组库中的代码片段 这在 Windows 上运行良好 但是当我在 Linux 上使用 gcc 编译时 如果此函数崩溃 当试图缩小问题范围时 我向其中添加了一条 printf 语句 代码不再崩溃 void arrayCreat
  • ConstraintLayout 视图位于左上角

    每次我创建这样的视图时Button and TextView in ConstraintLayout 它们都卡在顶角而不是我放置它们的位置 我尝试创建新的活动并更改模拟器 但结果仍然相同 这是正在发生的事情的屏幕截图 可能是什么问题 如中所
  • Mongotemplate.updateFirst() 不更新@LastModifiedDate

    我正在使用基于注释的配置 Configuration Profile default ComponentScan basePackages com EnableMongoRepositories EnableMongoAuditing pu
  • 创建SparkContext失败

    我正在用 scala 代码在 Spark shell 中测试 Spark 我正在构建使用 Kafka 和 Spark 的原型 我跑了spark shell像下面这样 spark shell jars spark external kafka
  • Microsoft Teams 身份验证:无法在团队机器人 (V4 SDK) 中检索令牌

    我有一个微软团队机器人我正在尝试使用以下方式对用户进行身份验证AAD v2 端点 该机器人使用V4 SDK 和 OauthPrompt 我可以登录但无法获取令牌 我正在使用 OAuth 卡 该卡正在 Teams 内渲染 单击登录按钮后 它将
  • 如何将 SQL Server 存储过程的返回值获取到 nHibernate 中?

    1 数据库平台 SqlServer 2 数据访问 nHibernate 1 2 现在我们需要通过 nHibernate 访问存储过程 如下所示 ALTER PROCEDURE TestProc AS BEGIN Select From Us
  • 在 Django 管理站点中显示自定义模型验证异常

    我有一个预订模型 需要检查预订的商品是否可用 我希望有一个逻辑来确定该项目是否可用集中 这样无论我在哪里保存实例 此代码都会验证它是否可以保存 目前 我的模型类的自定义保存函数中有此代码 def save self if self is a
  • MVP 模式 - 被动视图并通过 IView 公开复杂类型(Asp.Net、Web 表单)

    我最近切换到采用被动视图方法的 MVP 模式 当视图界面仅公开基本的 clr 类型 例如映射到 TextBoxes 的字符串 映射到 DropDownLists 的 IDictionary 映射到某些网格的 IEnumerable 中继器
  • 将 JSON 传递给 HTTP POST 请求

    我正在尝试使用以下命令向 google QPX Express API 1 发出 HTTP POST 请求nodejs and request 2 我的代码如下所示 create http request client to consume
  • .net 新进程沙箱用于不受信任的代码

    所以我需要在新进程中运行动态编译的不受信任的代码 我找到了如何在新的 AppDomain http msdn microsoft com en us library bb763046 aspx 中执行此操作 但没有在新进程中执行此操作 可以
  • 如何在 ruby​​ 代码中添加断言

    我想使用断言并将评估放入我的 ruby 代码中 例如 检查是否创建了 zip 文件 标签是否存在 文本区域中的消息等 我已经放了一些断言语句 例如assert selenium is text present textMessage 但它们
  • Android:按钮在滚动视图中不可见

    我正在制作一个 Android 应用程序来输入用户信息 因为我有两个按钮和数字选择器 我的按钮是自定义的 并且没有显示在 Android Studio 的预览中 也没有显示在模拟器中 这是我的代码
  • bufferedReader() 在 Kotlin 中到底是如何工作的?

    所以我试图从a读取数据 json我的 Android 项目中的文件 val file context assets open myfile json bufferedReader readText 这工作正常并成功打印出我的 json文件为
  • Python中的RSA加密和解密

    我需要在 Python 中使用 RSA 加密和解密的帮助 我正在创建一个私钥 公钥对 用密钥加密消息并将消息写入文件 然后我从文件中读取密文并使用密钥解密文本 我在解密部分遇到问题 正如您在下面的代码中看到的 当我输入decrypted k
  • Android 平板电脑和手机应使用哪种资源结构?

    上次出现更高密度的设备时 我更新了应用程序的资源 开始以更高分辨率绘制图标 并通过使用 res drawable hdpi 目录结构提供它们 到目前为止 一切都很好 现在我想做一些改变以适应 Android 平板电脑 更新了一些布局 然后我
  • 为 php7 设置 mongoDB 扩展

    我正在尝试安装 php7 的 mongoDB 扩展 我从全新安装的 Ubuntu Server 16 04 1 开始 预安装 操作系统安装时 的软件包有 LAMP 扩展 OpenSSL 和 MySQL 服务器 这是安装在本地 Virtual
  • HTML 属性 accesskey 无法正常工作

    因此 我正在测试所有不同的 HTML 标签和属性 稍微更新一下内容 但由于某种原因 accesskey 似乎不起作用 accesskey 属性用于为元素分配键 根据您的操作系统 按 Alt 该键 Windows 或 Cmd 该键 Mac 会
  • 如何使角度装饰器缩小友好?

    如何使这段代码对我来说具有缩小友好性 MyModule config provide function provide provide decorator exceptionHandler function delegate injecto
  • 在 python 3.7 中使用 Beautifulsoup 从《华尔街日报》网络抓取文章?

    我正在尝试使用 Python 中的 Beautifulsoup 从 华尔街日报 中抓取文章 但是 我正在运行的代码正在执行 没有任何错误 退出代码 0 但没有结果 我不明白发生了什么事 为什么这段代码没有给出预期的结果 我什至已经付费订阅了
  • 根据分隔符将特定元素属性拆分为多行

    我正在尝试转换 XML 并根据以下逗号将第三个 App Data 元素值拆分为多个重复行