我有這個輸入:如何修復XSLT中的消除轉換?
<root>
<sector>
<nodeA id="a">
<section id="i">
<item1 id="1" method="delete"/>
<item1 id="1" method="create">
<somechild>a</somechild>
</item1>
<item1 id="1" method="change">
<somechild>a</somechild>
</item1>
</section>
<section id="i">
<item1 id="1" method="change">
<somechild>a</somechild>
</item1>
</section>
<section id="i">
<item1 id="1" method="delete"/>
<item1 id="1" method="create">
<somechild>a</somechild>
</item1>
</section>
</nodeA>
</sector>
</root>
我的XSL是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*[not(.//*[@id!=''])][@method='delete']">
<xsl:if test="not(following::*[not(.//*[@id!=''])][@id=current()/@id][../@id = current()/../@id][generate-id(../..) = generate-id(current()/../..)])"/>
</xsl:template>
<xsl:template match="*[not(.//*[@id!=''])][@method!='delete']">
<xsl:if test="not(following::*[not(.//*[@id!=''])][@method='delete'][@id=current()/@id][../@id = current()/../@id][generate-id(../..) = generate-id(current()/../..)])"/>
</xsl:template>
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我的輸出:
<root>
<sector>
<nodeA id="a">
<section id="i">
</section>
<section id="i">
</section>
<section id="i">
</section>
</nodeA>
</sector>
</root>
預期輸出:
<root>
<sector>
<nodeA id="a">
<section id="i">
<item1 id="1" method="delete"/> <!-- leave this node -->
</section>
<section id="i">
</section>
<section id="i">
<item1 id="1" method="create"> <!-- leave this node -->
<somechild>a</somechild>
</item1>
</section>
</nodeA>
</sector>
</root>
的想法是,我想刪除元素節點的組合與
- 一個方法創建之後一個或多個修改之後一個刪除方法,剩下的不變。
- 它必須是相同的元素名稱,例如
<item1>
和@id
,並且在相同父級下例如<section id=1>
。
任何人都可以幫助我進行轉型嗎?
謝謝。 約翰
你的問題越來越棘手:) –