使用 XSLT 向 XML 添加属性和值
Adding an attribute and a value to XML using XSLT
我的输入XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQGetClaimAttachment>
<USERID>XXX</USERID>
<PASSWORD>XXX</PASSWORD>
<hostAddress>XXX</hostAddress>
<businessArea>CS2XAA</businessArea>
<sourceType>2XSRCTYP</sourceType>
<operator>GT</operator>
<lookupDate>2015-01-01T00.00.00.000000+05:30</lookupDate>
</PQGetClaimAttachment>
</PQ>
我想使用 XSLT 将上面的 xml 转换为下面的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1" name="XYZ">
<lookupParameters>
<lookupParameter name="businessArea">CS2XAA</lookupParameter>
<lookupParameter name="type">2XSRCTYP</lookupParameter>
<lookupParameter name="OPER">GT</lookupParameter>
<lookupParameter name="LDAT">2015-01-01T00.00.00.000000+05:30</lookupParameter>
</lookupParameters>
</lookupInstances>
我正在使用以下 XSLT,但它没有给我所需的输出 XML。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1"
name="XYZ">
<lookupParameters>
<lookupParameter businessArea="{//businessArea}" />
<lookupParameter type="{//sourceType}" />
<lookupParameter OPER="{//operator}" />
<lookupParameter LDAT="{//lookupDate}" />
</lookupParameters>
</lookupInstances>
</xsl:template>
</xsl:stylesheet>
谁能告诉我我哪里做错了?
如果您希望输出具有 name="businessArea"
属性,则给它们 businessArea=""
属性是没有意义的。
这应该可以满足您的需求:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1"
name="XYZ">
<lookupParameters>
<lookupParameter name="businessArea">
<xsl:value-of select="PQ/PQGetClaimAttachment/businessArea" />
</lookupParameter>
<lookupParameter name="type">
<xsl:value-of select="PQ/PQGetClaimAttachment/sourceType" />
</lookupParameter>
<lookupParameter name="OPER">
<xsl:value-of select="PQ/PQGetClaimAttachment/operator" />
</lookupParameter>
<lookupParameter name="LDAT">
<xsl:value-of select="PQ/PQGetClaimAttachment/lookupDate" />
</lookupParameter>
</lookupParameters>
</lookupInstances>
</xsl:template>
</xsl:stylesheet>
我的输入XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<PQ>
<PQGetClaimAttachment>
<USERID>XXX</USERID>
<PASSWORD>XXX</PASSWORD>
<hostAddress>XXX</hostAddress>
<businessArea>CS2XAA</businessArea>
<sourceType>2XSRCTYP</sourceType>
<operator>GT</operator>
<lookupDate>2015-01-01T00.00.00.000000+05:30</lookupDate>
</PQGetClaimAttachment>
</PQ>
我想使用 XSLT 将上面的 xml 转换为下面的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1" name="XYZ">
<lookupParameters>
<lookupParameter name="businessArea">CS2XAA</lookupParameter>
<lookupParameter name="type">2XSRCTYP</lookupParameter>
<lookupParameter name="OPER">GT</lookupParameter>
<lookupParameter name="LDAT">2015-01-01T00.00.00.000000+05:30</lookupParameter>
</lookupParameters>
</lookupInstances>
我正在使用以下 XSLT,但它没有给我所需的输出 XML。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1"
name="XYZ">
<lookupParameters>
<lookupParameter businessArea="{//businessArea}" />
<lookupParameter type="{//sourceType}" />
<lookupParameter OPER="{//operator}" />
<lookupParameter LDAT="{//lookupDate}" />
</lookupParameters>
</lookupInstances>
</xsl:template>
</xsl:stylesheet>
谁能告诉我我哪里做错了?
如果您希望输出具有 name="businessArea"
属性,则给它们 businessArea=""
属性是没有意义的。
这应该可以满足您的需求:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<lookupInstances xmlns="http://www.tech.com/awd/rest/v1"
name="XYZ">
<lookupParameters>
<lookupParameter name="businessArea">
<xsl:value-of select="PQ/PQGetClaimAttachment/businessArea" />
</lookupParameter>
<lookupParameter name="type">
<xsl:value-of select="PQ/PQGetClaimAttachment/sourceType" />
</lookupParameter>
<lookupParameter name="OPER">
<xsl:value-of select="PQ/PQGetClaimAttachment/operator" />
</lookupParameter>
<lookupParameter name="LDAT">
<xsl:value-of select="PQ/PQGetClaimAttachment/lookupDate" />
</lookupParameter>
</lookupParameters>
</lookupInstances>
</xsl:template>
</xsl:stylesheet>