Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于一个或多个元素或属性对XML记录重新排序_Xml_Xslt_Element - Fatal编程技术网

基于一个或多个元素或属性对XML记录重新排序

基于一个或多个元素或属性对XML记录重新排序,xml,xslt,element,Xml,Xslt,Element,我有一个XML格式的输入文件: <?xml version="1.0" encoding="UTF-8"?> <m2:M006 xmlns:m2="http://www.mym2.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mym2.com http://www.mym2.com/schemas/M2RequestSchema.xs

我有一个XML格式的输入文件:

   <?xml version="1.0" encoding="UTF-8"?>
   <m2:M006 xmlns:m2="http://www.mym2.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mym2.com http://www.mym2.com/schemas/M2RequestSchema.xsd"><M001><tkn /><m2xmlReleaseNo>020</m2xmlReleaseNo><mvmtHdr mvmtTp="CRT">
       <cmt>Reduction of nominal</cmt>
     </mvmtHdr><mvmtSrc>
       <ctlr>SAR</ctlr>
       <ctlrMvmtRef>464082138</ctlrMvmtRef>
       <srcRecType>Cash Transaction</srcRecType>
       <srcTransType>Reduction of Nominal</srcTransType>
     </mvmtSrc><extSys>
       <extSysID>SAR</extSysID>
       <extSysRef>464082138</extSysRef>
     </extSys><hldCpt1 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.00595-6</ctlrOwnr>
         <ctlrAcct>6005956.6000</ctlrAcct>
         <ownrRefCcy>CHF</ownrRefCcy>
         <ccy>CHF</ccy>
         <asst>CH0013841017</asst>
         <asstIDs>
           <asstRef refType="ISIN">CH0013841017</asstRef>
           <asstRef refType="Valor">1384101</asstRef>
           <asstRef refType="SARA">000000426547</asstRef>
         </asstIDs>
         <asstDetail>
           <isin>CH0013841017</isin>
           <type>Shares</type>
           <cntry>CH/Switzerland</cntry>
           <desc>Lonza Group AG Nam.</desc>
           <issueCcy>CHF</issueCcy>
           <latestPrc ccy="CHF">126.50</latestPrc>
           <latestPrcDate>2015-04-14</latestPrcDate>
         </asstDetail>
       </hldId>
       <effDt>2015-04-14</effDt>
       <settleDt>2015-04-14</settleDt>
       <qty>5000</qty>
       <prc ccy="CHF">2.5</prc>
       <grTrdAmt ccy="CHF">-12500</grTrdAmt>
       <grAmt ccy="CHF">-12500</grAmt>
       <netAmt ccy="CHF">-12500</netAmt>
     </hldCpt1><hldCpt2 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.00595-6</ctlrOwnr>
         <ctlrAcct>6005956.4000/CHF/KK</ctlrAcct>
         <ccy>CHF</ccy>
         <asst>CHF</asst>
         <asstIDs>
           <asstRef refType="CURRENCY">CHF</asstRef>
         </asstIDs>
       </hldId>
       <effDt>2015-04-14</effDt>
       <grAmt ccy="CHF">12500</grAmt>
       <netAmt ccy="CHF">12500</netAmt>
     </hldCpt2></M001><M001><tkn /><m2xmlReleaseNo>020</m2xmlReleaseNo><mvmtHdr mvmtTp="CCL">
       <cmt>Variation Margin</cmt>
     </mvmtHdr><mvmtSrc>
       <ctlr>SAR</ctlr>
       <ctlrMvmtRef>464068243</ctlrMvmtRef>
       <srcRecType>Cash Transaction</srcRecType>
       <srcTransType>Variation Margin</srcTransType>
     </mvmtSrc><extSys>
       <extSysID>SAR</extSysID>
       <extSysRef>464068243</extSysRef>
     </extSys><hldCpt1 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.00767-3</ctlrOwnr>
         <ctlrAcct>6007673.6000</ctlrAcct>
         <ownrRefCcy>EUR</ownrRefCcy>
         <ccy>EUR</ccy>
         <asst>73896793</asst>
         <asstIDs>
           <asstRef refType="Valor">73896793</asstRef>
           <asstRef refType="SARA">000125009930</asstRef>
         </asstIDs>
         <asstDetail>
           <type>Future</type>
           <cntry>DE/Germany</cntry>
           <desc>FGBL - BUND FUTURES Jun15 EUX</desc>
           <issueCcy>EUR</issueCcy>
           <latestPrc ccy="EUR">159.54</latestPrc>
           <latestPrcDate>2015-04-14</latestPrcDate>
           <asstDerivDetails>
             <contractSize>100000</contractSize>
             <expDate>2015-06-08</expDate>
             <underlyingAsstIDs>
               <asstRef refType="Valor">0000004209</asstRef>
             </underlyingAsstIDs>
           </asstDerivDetails>
         </asstDetail>
       </hldId>
       <effDt>2015-04-14</effDt>
       <settleDt>2015-04-14</settleDt>
       <qty>-10</qty>
       <prc ccy="EUR">989898</prc>
       <grTrdAmt ccy="EUR">100</grTrdAmt>
       <grAmt ccy="EUR">100</grAmt>
       <netAmt ccy="EUR">100</netAmt>
     </hldCpt1><hldCpt2 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.00767-3</ctlrOwnr>
         <ctlrAcct>6007673.4004/EUR/KK 'Variation Margin'</ctlrAcct>
         <ccy>EUR</ccy>
         <asst>EUR</asst>
         <asstIDs>
           <asstRef refType="CURRENCY">EUR</asstRef>
         </asstIDs>
       </hldId>
       <effDt>2015-04-14</effDt>
       <grAmt ccy="EUR">-100</grAmt>
       <netAmt ccy="EUR">-100</netAmt>
     </hldCpt2></M001><M001><tkn /><m2xmlReleaseNo>020</m2xmlReleaseNo><mvmtHdr mvmtTp="AOU">
       <cmt>Variation Margin</cmt>
     </mvmtHdr><mvmtSrc>
       <ctlr>SAR</ctlr>
       <ctlrMvmtRef>464068485</ctlrMvmtRef>
       <srcRecType>Cash Transaction</srcRecType>
       <srcTransType>Variation Margin</srcTransType>
     </mvmtSrc><extSys>
       <extSysID>SAR</extSysID>
       <extSysRef>464068485</extSysRef>
     </extSys><hldCpt1 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.01279-4</ctlrOwnr>
         <ctlrAcct>6012794.6000</ctlrAcct>
         <ownrRefCcy>EUR</ownrRefCcy>
         <ccy>CHF</ccy>
         <asst>74040383</asst>
         <asstIDs>
           <asstRef refType="Valor">74040383</asstRef>
           <asstRef refType="SARA">000125132191</asstRef>
         </asstIDs>
         <asstDetail>
           <type>Future</type>
           <cntry>CH/Switzerland</cntry>
           <desc>FSMI FUTURES Jun15 EUX</desc>
           <issueCcy>CHF</issueCcy>
           <latestPrc ccy="CHF">9288.00</latestPrc>
           <latestPrcDate>2015-04-14</latestPrcDate>
           <asstDerivDetails>
             <contractSize>10</contractSize>
             <expDate>2015-06-19</expDate>
             <underlyingAsstIDs>
               <asstRef refType="Valor">0000004208</asstRef>
             </underlyingAsstIDs>
           </asstDerivDetails>
         </asstDetail>
       </hldId>
       <effDt>2015-04-14</effDt>
       <settleDt>2015-04-14</settleDt>
       <qty>-14</qty>
       <prc ccy="CHF">989898</prc>
       <grTrdAmt ccy="CHF">-6440</grTrdAmt>
       <grAmt ccy="CHF">-6440</grAmt>
       <netAmt ccy="CHF">-6440</netAmt>
     </hldCpt1><hldCpt2 amtScheme="m2">
       <hldId>
         <ctlrOwnr>6.01279-4</ctlrOwnr>
         <ctlrAcct>6012794.4019/CHF/KK 'Variation Margin'</ctlrAcct>
         <ccy>CHF</ccy>
         <asst>CHF</asst>
         <asstIDs>
           <asstRef refType="CURRENCY">CHF</asstRef>
         </asstIDs>
       </hldId>
       <effDt>2015-04-14</effDt>
       <grAmt ccy="CHF">6440</grAmt>
       <netAmt ccy="CHF">6440</netAmt>
     </hldCpt2></M001></m2:M006>
但这不起作用

这个有效

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="*">
    <xsl:copy>
      <xsl:apply-templates select="@*">
        <xsl:sort select="name()"/>
      </xsl:apply-templates>
      <xsl:apply-templates>
        <xsl:sort select="mvmtSrc/ctlrMvmtRef"/>
        <xsl:sort select="mvmtHdr/@mvmtTp"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

还有一点,如果我不想按照严格的字母顺序对mvmtTp排序,例如。 而不是 艾因 AOU 副署长 这样地 AOU 艾因 副署长

这意味着AOU总是在AIN之前

const string FILENAME=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XDocument输入=XDocument.Load(文件名);
var x=input.Root.Elements(“M001”).AsEnumerable()
.OrderBy(y=>y.Element(“mvmtSrc”).Element(“ctlrMvmtRef”).Value.ToList();
XDocument doc2=新XDocument(新XElement(“M006”,x));

}
您的问题是什么?顺便说一句,“我如何做到这一点”太宽泛了。我想用xslt来做到这一点,而且我对xslt还不熟悉。当您真的应该在问题的某个地方说明xslt并使用xslt标记时。还请将XML格式化为代码;这是无法理解的方式,你有它。您还应该将XML裁剪到最小大小,并显示最小XML在输出中的外观。最后,理想情况下,您应该自己编写一些XSLT来展示您所做的尝试。谢谢。我已经向您展示了如何格式化代码,并且修复了您的大写/语法错误。请参阅我在上述评论中提出的其他建议。如果你努力把你的问题表达得很好,你可以在这里得到很大的帮助。这个问题是问XSLT。最初的帖子没有XSLT。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="*">
    <xsl:copy>
      <xsl:apply-templates select="@*">
        <xsl:sort select="name()"/>
      </xsl:apply-templates>
      <xsl:apply-templates>
        <xsl:sort select="mvmtSrc/ctlrMvmtRef"/>
        <xsl:sort select="mvmtHdr/@mvmtTp"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>