以下是我的输入XML
<ServiceIncident xmlns="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2">
<ServiceProvider>
<Person Role="AffectedUser">
<ContactID>ITELLA_BRIDGE_USER</ContactID>
<FullName>Chad Whaley</FullName>
</Person>
</ServiceProvider>
在Person Role的输出中我需要在上面的代码中使用Role代替AffectedUser Role是person的属性.Below是我的XSLT
xmlns:r2="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="r2:Person@Role">
<xsl:copy>Owner</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
您的输入不是有效的XML。希望你有有效的XML。我假设这个:
<ServiceIncident xmlns="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2">
<ServiceProvider>
<Person Role="AffectedUser">
<ContactID>ITELLA_BRIDGE_USER</ContactID>
<FullName>Chad Whaley</FullName>
</Person>
</ServiceProvider>
</ServiceIncident>
您的XSLT也不是XSLT,缺少开头。我假设它始于<xsl:stylesheet
某处。
在所有这些假设下,XSLT转换器给出了一个非常明确的错误消息:
'r2:Person@Role' is an invalid XPath expression.
这可以修复为r2:Person/@Role
。
接下来,<xsl:copy>
不适合您。也许你想要
<xsl:attribute name="Role">Owner</xsl:attribute>
所以我们终于有了
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xml:space="default" exclude-result-prefixes="" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:r2="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2">
<xsl:output method="xml" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="r2:Person/@Role">
<xsl:attribute name="Role">Owner</xsl:attribute>
</xsl:template>
</xsl:stylesheet>