我需要进行以下转换,以便通过不理解xsi:nil=“true”
的集成代理程序传递消息。我知道,对于像<abc></abc>
这样的字符串的字符串与<abc 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']" />
关于 Martin Honnen 所述的开始和结束标记主题I suggest reading this SO question(在答案的评论中):
我担心空元素是否被标记为或者不是与XML有关的东西,并且通常不是您可以使用XSLT处理器控制的东西。