You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DSPACCNAME节点及其子节点移入同层级DSPACCINFO节点

解决方案

以下是可以实现需求的XSLT 1.0代码:

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

 <!-- 身份模板:复制所有未被特殊匹配的节点与属性 -->
 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <!-- 匹配DSPACCINFO节点,先插入其紧邻的前一个DSPACCNAME,再处理自身内容 -->
 <xsl:template match="DSPACCINFO">
  <xsl:copy>
    <!-- 复制当前DSPACCINFO的前一个兄弟节点DSPACCNAME -->
    <xsl:copy-of select="preceding-sibling::DSPACCNAME[1]"/>
    <!-- 处理DSPACCINFO自身的子节点 -->
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <!-- 隐藏原始的DSPACCNAME节点,避免重复输出 -->
 <xsl:template match="DSPACCNAME"/>
</xsl:stylesheet>

原代码问题分析

你之前的XSLT未实现核心需求,问题在于:

  • 仅对DSPACCNAME节点做了复制操作,但未将其嵌入到对应的DSPACCINFO内部
  • 没有隐藏原始的DSPACCNAME节点,导致输出中仍保留这些独立节点

应用后输出效果

使用上述XSLT处理输入XML后,会得到你预期的输出:

<ENVELOPE>
 <DSPACCINFO>
 <DSPACCNAME>
  <DSPDISPNAME>Account 1</DSPDISPNAME>
</DSPACCNAME>
  <DSPOPAMT>
   <DSPOPAMTA>-100.14</DSPOPAMTA>
</DSPOPAMT>
  <DSPDRAMT>
   <DSPDRAMTA></DSPDRAMTA>
</DSPDRAMT>
  <DSPCRAMT>
   <DSPCRAMTA></DSPCRAMTA>
</DSPCRAMT>
  <DSPCLAMT>
   <DSPCLAMTA>-100.14</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
 <DSPACCINFO>
 <DSPACCNAME>
  <DSPDISPNAME>Account 2</DSPDISPNAME>
</DSPACCNAME>
  <DSPOPAMT>
   <DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
  <DSPDRAMT>
   <DSPDRAMTA>-470.00</DSPDRAMTA>
</DSPDRAMT>
  <DSPCRAMT>
   <DSPCRAMTA>470.00</DSPCRAMTA>
</DSPCRAMT>
  <DSPCLAMT>
   <DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
 <DSPACCINFO>
 <DSPACCNAME>
  <DSPDISPNAME>Account 3</DSPDISPNAME>
</DSPACCNAME>
  <DSPOPAMT>
   <DSPOPAMTA>-942.00</DSPOPAMTA>
</DSPOPAMT>
  <DSPDRAMT>
   <DSPDRAMTA>-445.05</DSPDRAMTA>
</DSPDRAMT>
  <DSPCRAMT>
   <DSPCRAMTA>446.00</DSPCRAMTA>
</DSPCRAMT>
  <DSPCLAMT>
   <DSPCLAMTA>941.00</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
 <DSPACCINFO>
 <DSPACCNAME>
  <DSPDISPNAME>Account 4</DSPDISPNAME>
</DSPACCNAME>
  <DSPOPAMT>
   <DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
  <DSPDRAMT>
   <DSPDRAMTA>-830.99</DSPDRAMTA>
</DSPDRAMT>
  <DSPCRAMT>
   <DSPCRAMTA>830.99</DSPCRAMTA>
</DSPCRAMT>
  <DSPCLAMT>
   <DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
</ENVELOPE>

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:54:51