X-Path表达式中的属性问题

时间:2014-02-12 06:13:35

标签: xslt

以下是我的输入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>

1 个答案:

答案 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>