2014-03-03 69 views
-3

我是XSLT的新手,并且在定义xml文件时遇到了一些问题。合并XML部分XSLT

我需要知道XSLT代码,我有一个序列化的XML(XML A),我想要转换成XML B?

我不确定如何将客户部分合并到一个部分。

在此先感谢

XML一个

<Customers> 
    <Customer> 
    <Policy> 
     <diaPolicyId>8B71E21FEFF546A680DFE9DA40EC0711</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
    </Policy> 
    <PolicyAddtional> 
     <diaPolicyId>8B71E21FEFF546A680DFE9DA40EC0711</diaPolicyId> 
    </PolicyAddtional> 
    <Customer> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <Title>003</Title> 
    </Customer> 
    <CustomerAddtional> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <IsBirthday>false</IsBirthday> 
    </CustomerAddtional> 
    </Customer> 
    <Customer> 
    <Policy> 
     <diaPolicyId>E835E227EA8F44F1BDCF346CE63541F3</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
    </Policy> 
    <PolicyAddtional> 
     <diaPolicyId>E835E227EA8F44F1BDCF346CE63541F3</diaPolicyId> 
    </PolicyAddtional> 
    <Customer> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
    </Customer> 
    <CustomerAddtional> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <IsBirthday>false</IsBirthday> 
    </CustomerAddtional> 
    </Customer> 
</Customers> 

XML乙

<Customers> 
    <Customer> 
     <diaPolicyId>8B71E21FEFF546A680DFE9DA40EC0711</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <diaPolicyId>8B71E21FEFF546A680DFE9DA40EC0711</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <Title>003</Title> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <IsBirthday>false</IsBirthday> 
    </Customer> 
    <Customer> 
     <diaPolicyId>E835E227EA8F44F1BDCF346CE63541F3</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <diaPolicyId>E835E227EA8F44F1BDCF346CE63541F3</diaPolicyId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <diaCustomerId>STE/WIL/19650420</diaCustomerId> 
     <IsBirthday>false</IsBirthday> 
    </Customer> 
</Customers> 

更新:新增XSLT这样做的远:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="Customers"> 
    <combined> 
     <xsl:copy-of select="@* | Customer/@*" /> 
    </combined> 
    </xsl:template> 
</xsl:stylesheet> 
+1

请包括XSLT样式表你来了这么远 - 即使它不工作。然后,确定有问题的部分,并且需要帮助。如果您一般不确定XSLT,请删除此问题并改为了解XSLT的基础知识。 –

+0

对不起,添加了我使用过的XSLT,目前我不输出任何内容。 – user3374929

+0

“然后,找出有问题的部分,并且需要帮助。” –

回答

1

你首先需要了解XSLT identity transform

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

就其本身而言它会将所有的元素 - 是的,这意味着你只需要为你写的确实希望更改节点模板。

看起来您希望删除Customer元素的子元素(尽管让子元素保留其子元素)。在这种情况下,你只需要添加这个模板来处理这个

<xsl:template match="Customers/Customer/*"> 
    <xsl:apply-templates /> 
</xsl:template> 

所以“客户/客户/ *”你想删除(或者更确切地说,没有复制到输出)的元素相匹配,并<xsl:apply-templates />然后将在处理他们的孩子(这将是由恒等变换匹配)

携带试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output indent="yes"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Customers/Customer/*"> 
     <xsl:apply-templates /> 
    </xsl:template> 
</xsl:stylesheet> 
+0

谢谢我将有一个阅读,让你知道我怎么得到 – user3374929

+0

感谢您的帮助。最后,我用C sharp中的动态将不同的类合并在一起,然后进行序列化 – user3374929