2017-07-27 38 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處理器控制的東西。