合并XML节XSLT

合并XML节XSLT,xml,xslt,Xml,Xslt,我是XSLT新手,在转换xml文件时遇到了一些问题 我需要知道XSLT代码,我有一个序列化的xml(XMLA),我想转换成XMLB 我不知道如何将客户部分合并为一个部分 提前谢谢 XML A <Customers> <Customer> <Policy> <diaPolicyId>8B71E21FEFF546A680DFE9DA40EC0711</diaPolicyId> <diaCustome

我是XSLT新手,在转换xml文件时遇到了一些问题

我需要知道XSLT代码,我有一个序列化的xml(XMLA),我想转换成XMLB

我不知道如何将客户部分合并为一个部分

提前谢谢

XML A

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

8B71E21EFF546A680DFE9DA40EC0711
STE/WIL/19650420
8B71E21EFF546A680DFE9DA40EC0711
STE/WIL/19650420
003
STE/WIL/19650420
假的
E835E227EA8F44F1BDCF346CE63541F3
STE/WIL/19650420
E835E227EA8F44F1BDCF346CE63541F3
STE/WIL/19650420
STE/WIL/19650420
假的
XML B

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

8B71E21EFF546A680DFE9DA40EC0711
STE/WIL/19650420
8B71E21EFF546A680DFE9DA40EC0711
STE/WIL/19650420
003
STE/WIL/19650420
假的
E835E227EA8F44F1BDCF346CE63541F3
STE/WIL/19650420
E835E227EA8F44F1BDCF346CE63541F3
STE/WIL/19650420
STE/WIL/19650420
假的
更新:添加了迄今为止完成的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>

您首先需要了解


它自己按原样复制所有元素,这意味着您只需要为实际希望更改的节点编写模板

看起来您希望删除客户元素的子元素(尽管保留这些子元素的子元素)。在这种情况下,您只需添加此模板即可处理此问题

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

因此,“Customers/Customer/*”匹配您要删除的元素(或者更确切地说,不复制到输出),然后
将继续处理它们的子元素(将由标识转换匹配)

试试这个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>


请包括您迄今为止提出的XSLT样式表,即使它不起作用。然后,确定有问题且需要帮助的部分。如果您对XSLT总体不确定,请删除此问题并了解XSLT的基础知识。抱歉,添加了我使用过的XSLT,我现在不输出任何内容。“然后,确定有问题的部分以及您需要帮助的部分。”请不要误会,但我对这方面还很陌生,所以如果你能给我指出正确的方向,那就太好了。谢谢你的帮助。最后,我使用C sharp中的dynamics将不同的类合并在一起,然后序列化
<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>