2014-02-11 48 views
0

下面是我的XML输入XSLT/X-路径表达式

<ServiceIncident xmlns="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2"> 
<RequesterID/> 
<ProviderID>INC0011731</ProviderID> 
<ProviderPriority>4</ProviderPriority> 
<WorkflowStatus>NEW</WorkflowStatus> 
<Transaction> 
    <Acknowledge>1</Acknowledge> 
    <StatusCode>0</StatusCode> 
    <Comment>String</Comment> 
    <TransactionName>Problem_Submittal</TransactionName> 
    <TransactionType>2</TransactionType> 
    <TransactionDateTime>2012-10-19T16:05:56Z</TransactionDateTime> 
    <TransactionNumber>2012-10-19T16:05:56Z:1ae9b6a79901fc40fa75c64e1cdcc3b4</TransactionNumber> 
    <TransactionRouting>MX::ITELLASNINCBRDG</TransactionRouting> 
    <DataSource>ServiceNow</DataSource> 
    <DataTarget>NASPGR72</DataTarget> 
</Transaction> 

我的问题是只有一个或两个领域,我需要比其它XSLT无论是在输入我需要在输出映射。

以下是iam在xslt中使用的复制输入的代码。

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

其不是通过使用以下x路的表达,但不IAM获得输出在输入和输出相同的是IAM映射一个元件之后。

<TransactionRouting> 
    <xsl:text>Maximo</xsl:text> 
</TransactionRouting> 

通过使用上述复制代码亚姆能够整个输入复制作为输出,但如果IAM试图通过使用X路径表达式做地图中的xsl一种元素如上所示这是不是在输入和输出IAM相同不能这样做,请帮助我。

+0

目前还不清楚你的意思是“在XSL中映射元素”。此外,请将您的问题的标题更改为比“XSLT/XPath问题”更具体且更有意义的短语。谢谢! –

+0

你说的是“下面的XPath表达式”,但是你的问题中没有显示任何XPath表达式。你可以编辑问题来显示_whole_ XSLT文件吗? –

回答

0

你的XML有一个默认的命名空间xmlns="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2"

这意味着所有节点都是命名空间下。你需要在你的样式表中包含这个xmlns:ibm="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2"。之后,您可以使用前缀ibm:来引用节点。 exclude-result-prefixes="ibm"消除了输出处的前缀。

以下样式表可能是你所需要的

<xsl:stylesheet version="1.0" 
    xmlns:ibm="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    exclude-result-prefixes="ibm"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <!-- match element TransactionRouting --> 
    <xsl:template match="ibm:TransactionRouting"> 
     <xsl:copy> 
      <xsl:text>Maximo</xsl:text> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
0

你的问题不是很清楚,但根据我的理解,我已经尝试过这种

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method='xml' indent='yes'/> 

    <xsl:template match='/'> 
     <xsl:apply-templates/> 
     <xsl:element name='TransactionRouting'>Maximo</xsl:element> 
    </xsl:template> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

希望!这将符合你的要求:)

+0

考虑将' Maximo'更改为' Maximo'。 –

+0

是不同的路线到相同的目的地 – 2014-02-11 11:10:50

+0

当然结果是相同的 - 但如果元素名称是静态地知道无论如何使用xsl:元素是不必要的复杂。 –