2017-07-27 334 views
0

为了让消息通过不理解xsi:nil=“true”的集成代理,我需要执行以下转换。我知道,对于像<abc></abc>之类的字符串与<abc xsi:nil=“true”/>不同,但我没有选择。使用打开和关闭标记替换xsi:nil =“true”

我输入XML:

<PART> 
<LENGTH_UOM xsi:nil="1"/> 
      <WIDTH xsi:nil="1"/> 
</PART> 

预期的结果:

<PART> 
    <LENGTH_UOM><LENGTH_UOM> 
    <WIDTH></WIDTH> 
</PART> 

请让我知道你的建议。

+0

你想摆脱所有元素的所有属性? –

回答

1

要删除所有xsi:nil属性,请将标识模板与匹配xsi:nil的空模板组合。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://xsi.com">  
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

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

    <xsl:template match="@xsi:nil" />    <!-- empty template --> 

</xsl:stylesheet> 

如果你只是想删除那些值为true使用下面的空模板。

<xsl:template match="@xsi:nil[.='1' or .='true']" /> 

关于打开和关闭标签话题I suggest reading this SO question其中马丁Honnen指出(在答案的评论):

恐怕无论是空的元素被标记为或或者对于XML来说不重要,并且通常不是您可以用XSLT处理器控制的东西。