Xml xsl:转换每个标记值
我正在JMeter中创建一些性能测试,并试图使测试脚本尽可能可配置。例如,我使用以下XML:Xml xsl:转换每个标记值,xml,xml-parsing,xslt-2.0,Xml,Xml Parsing,Xslt 2.0,我正在JMeter中创建一些性能测试,并试图使测试脚本尽可能可配置。例如,我使用以下XML: <Party> <Id>123456</Id> </Party> <Agreement> <InternalAgreement> <Id>2508153801</Id> <AgreementType>UYTU</AgreementType>
<Party>
<Id>123456</Id>
</Party>
<Agreement>
<InternalAgreement>
<Id>2508153801</Id>
<AgreementType>UYTU</AgreementType>
<AgreementTypeCombination>ULLL</AgreementTypeCombination>
<ContractType>3</ContractType>
<IdCombination>250851536</IdCombination>
<ProductCode>A260</ProductCode>
</InternalAgreement>
</Agreement>
<PartyAgreementRole>
<PartyInternalAgreementRole>
<PartyAgreementRoleType>AWS</PartyAgreementRoleType>
<RoleTypeSequenceNumber>054</RoleTypeSequenceNumber>
<EndDate>2016-11-28</EndDate>
</PartyInternalAgreementRole>
</PartyAgreementRole>
我希望使用xslt将上述xml转换为以下内容,并提及不同的Id:
<Party>
<Id>${Id_1}</Id>
</Party>
<Agreement>
<InternalAgreement>
<Id>${Id_2}</Id>
<AgreementType>${AgreementType}</AgreementType>
<AgreementTypeCombination>${AgreementTypeCombination}</AgreementTypeCombination>
<ContractType>${ContractType}</ContractType>
<IdCombination>${IdCombination}</IdCombination>
<ProductCode>${ProductCode}</ProductCode>
</InternalAgreement>
</Agreement>
<PartyAgreementRole>
<PartyInternalAgreementRole>
<PartyAgreementRoleType>${PartyAgreementRoleType}</PartyAgreementRoleType>
<RoleTypeSequenceNumber>${RoleTypeSequenceNumber}</RoleTypeSequenceNumber>
<EndDate>${EndDate}</EndDate>
</PartyInternalAgreementRole>
</PartyAgreementRole>
到目前为止,我还没有在xslt中创建一个通用的解决方案来实现这一点。到目前为止,我已经想到:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()/text()[.='VN']">${PartyAgreementRoleType}</xsl:template>
但这远远不是解决办法。有人能告诉我正确的方向吗 我不理解代码中的${PartyAgreementRoleType},因为在示例输入中似乎没有任何VN
但是,如果要填充Id元素,则
<xsl:template match="Id">
<xsl:copy>
<xsl:text>${Id_</xsl:text>
<xsl:number level="any"/>
<xsl:text>}</xsl:text>
</xsl:copy>
</xsl:template>
如果其他元素要用它们的名称填充,那么
<xsl:template match="*[not(*)]">
<xsl:copy>
<xsl:text>${</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>}</xsl:text>
</xsl:copy>
</xsl:template>
应该实现这一点,所以将这些模板放在一起
<xsl:transform 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="*[not(*)]">
<xsl:copy>
<xsl:text>${</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>}</xsl:text>
</xsl:copy>
</xsl:template>
<xsl:template match="Id" priority="5">
<xsl:copy>
<xsl:text>${Id_</xsl:text>
<xsl:number level="any"/>
<xsl:text>}</xsl:text>
</xsl:copy>
</xsl:template>
</xsl:transform>
哪种转变
<Root>
<Party>
<Id>123456</Id>
</Party>
<Agreement>
<InternalAgreement>
<Id>2508153801</Id>
<AgreementType>UYTU</AgreementType>
<AgreementTypeCombination>ULLL</AgreementTypeCombination>
<ContractType>3</ContractType>
<IdCombination>250851536</IdCombination>
<ProductCode>A260</ProductCode>
</InternalAgreement>
</Agreement>
<PartyAgreementRole>
<PartyInternalAgreementRole>
<PartyAgreementRoleType>AWS</PartyAgreementRoleType>
<RoleTypeSequenceNumber>054</RoleTypeSequenceNumber>
<EndDate>2016-11-28</EndDate>
</PartyInternalAgreementRole>
</PartyAgreementRole>
</Root>
进入
在线。Martin,感谢您分享您的知识。你的解决方案正是我想要的。当然,“VN”应该是“AWS”
<?xml version="1.0" encoding="UTF-8"?><Root>
<Party>
<Id>${Id_1}</Id>
</Party>
<Agreement>
<InternalAgreement>
<Id>${Id_2}</Id>
<AgreementType>${AgreementType}</AgreementType>
<AgreementTypeCombination>${AgreementTypeCombination}</AgreementTypeCombination>
<ContractType>${ContractType}</ContractType>
<IdCombination>${IdCombination}</IdCombination>
<ProductCode>${ProductCode}</ProductCode>
</InternalAgreement>
</Agreement>
<PartyAgreementRole>
<PartyInternalAgreementRole>
<PartyAgreementRoleType>${PartyAgreementRoleType}</PartyAgreementRoleType>
<RoleTypeSequenceNumber>${RoleTypeSequenceNumber}</RoleTypeSequenceNumber>
<EndDate>${EndDate}</EndDate>
</PartyInternalAgreementRole>
</PartyAgreementRole>
</Root>