如何使用 XSLT 将 XML 转换为 XML

问题描述 投票:0回答:1

我不知道我错过了什么,但是......我有这个 XML:

<Records xmlns=http://www.archer-tech.com/ xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=https://analysiscenter.veracode.com/schema/2.0/archerapi https://analysiscenter.veracode.com/resource/2.0/archerreport.xsd>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
<cwe_description>testsdsasadas</cwe_description>
</Record>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
</Record>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
<cwe_description>testsdsasadsadasdsadaas</cwe_description>
</Record>
</Records>

我已经尝试使用 xslt 来做到这一点:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:output method="xml" input="xml" />
<xsl:template match="/">
<Records>
<xsl:for-each select="./Record">
<Record>
<xsl:copy-of select="app_name" />
<app_id><xsl:value-of select="app_id" /></app_id>
<cwe_description>
<xsl:if test="cwe_description">
<xsl:copy-of select="cwe_description" />
</xsl:if>
</cwe_description>
</Record>
</xsl:for-each>
</Records>
</xsl:template>
</xsl:stylesheet>

我期待这样的 XML:

<Records>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
<cwe_description>testsdsasadas</cwe_description>
</Record>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
<cwe_description></cwe_description>
</Record>
<Record>
<app_name>C3L-SCHEDULER</app_name>
<app_id>1484475</app_id>
<cwe_description>testsdsasadsadasdsadaas</cwe_description>
</Record>
</Records>

它正在工作,但我收到了翻译后的 XML:

如何解决?有谁知道如何帮助我吗?

xml xslt-1.0
1个回答
0
投票

请尝试以下 XSLT。

它有两件事:

  1. 删除命名空间。
  2. 添加缺失的
    <cwe_description/>
    元素。

输入XML

<?xml version="1.0"?>
<Records xmlns="http://www.archer-tech.com/"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://analysiscenter.veracode.com/schema/2.0/archerapi https://analysiscenter.veracode.com/resource/2.0/archerreport.xsd">
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
        <cwe_description>testsdsasadas</cwe_description>
    </Record>
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
    </Record>
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
        <cwe_description>testsdsasadsadasdsadaas</cwe_description>
    </Record>
</Records>

XSLT 1.0

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ns1="http://www.archer-tech.com/"
                exclude-result-prefixes="ns1">
    <xsl:output method="xml" indent="yes"/>

    <!-- remove all namespaces -->
    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="ns1:Record[not(ns1:cwe_description)]">
        <Record>
            <app_name><xsl:value-of select="ns1:app_name" /></app_name>
            <app_id><xsl:value-of select="ns1:app_id" /></app_id>
            <cwe_description/>
        </Record>
    </xsl:template>
</xsl:stylesheet>

输出XML

<?xml version="1.0" encoding="utf-8"?>
<Records>
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
        <cwe_description>testsdsasadas</cwe_description>
    </Record>
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
        <cwe_description/>
    </Record>
    <Record>
        <app_name>C3L-SCHEDULER</app_name>
        <app_id>1484475</app_id>
        <cwe_description>testsdsasadsadasdsadaas</cwe_description>
    </Record>
</Records>
© www.soinside.com 2019 - 2024. All rights reserved.