【问题标题】:regular expression xpath to remove a specific node from a body xml正则表达式 xpath 从正文 xml 中删除特定节点
【发布时间】:2021-11-09 23:50:59
【问题描述】:

鉴于此正文 xml:

<NUM>
<VAL>
<TRANS> 2 </TRANS>
<TRANS> 3 </TRANS>
<TRANS> 4 </TRANS>
<TRANS> MG </TRANS>
<ATTACH> PROVA </ATTACH>
</VAL>
</NUM>

我想要结果:

<NUM>
<VAL>
<TRANS> 2 </TRANS>
<TRANS> 3 </TRANS>
<TRANS> 4 </TRANS>
<ATTACH> PROVA </ATTACH>
</VAL>
</NUM>

实际上,我想选择所有 xml,但只删除最后一个名为 trans 的节点。

【问题讨论】:

  • 这个任务最适合 XSLT。

标签: xml xpath filter wso2esb nsregularexpression


【解决方案1】:

删除满足您请求的 &lt;TRANS&gt; MG &lt;/TRANS&gt; 元素的一种 XSLT 方法可能是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.idpf.org/2007/opf">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*" />
    
    <xsl:template match="node()|@*">         
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="NUM/VAL/TRANS[last()]" />
    
</xsl:stylesheet>

它的输出是:

<?xml version="1.0" encoding="UTF-8"?>
<NUM>
  <VAL>
    <TRANS> 2 </TRANS>
    <TRANS> 3 </TRANS>
    <TRANS> 4 </TRANS>
    <ATTACH> PROVA </ATTACH>
  </VAL>
</NUM>

请注意,它会删除序列中出现的&lt;TRANS&gt; 元素的last(),而不是&lt;ATTACH&gt; 元素之前的最后一个元素。

【讨论】:

  • 身体还是一样,什么都没有消除,为什么? @zx485
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多