我需要根据对其他元素值的选择删除完整的父节点。
我的XML是
<EAI>
<SvcRS>
<accountHeader>
<errorHost>orgA</errorHost>
</accountHeader>
<accoutnDetails>
<accountNumber>0000000111118800</accountNumber>
<accountType>credit</accountType>
<errorDetails>
<code>111</code>
<description>Account is not valid</description>
</errorDetails>
</accoutnDetails>
</SvcRS>
<SvcRS>
<accountHeader>
<errorHost>orgB</errorHost>
</accountHeader>
<accoutnDetails>
<accountNumber>000111118800</accountNumber>
<accountType>credit</accountType>
<errorDetails>
<code>0001</code>
<description>Not enough balance</description>
</errorDetails>
</accoutnDetails>
</SvcRS>
</EAI>
现在,我必须检查<errorHost>
是否为orgA
,然后检查相同的帐号111118800
,我必须删除<accountDetails>
orgB
, XML可以有多个帐户,所以我必须删除orgB
我正在尝试很多选择,但似乎没有任何工作。
输出
<EAI>
<accoutnDetails>
<accountNumber>111118800</accountNumber>
<accountType>credit</accountType>
<errorHost>orgA</errorHost>
<errorDetails>
<code>111</code>
<description>Account is not valid</description>
</errorDetails>
</accoutnDetails>
</EAI>
答案 0 :(得分:0)
试试这个:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="accoutnDetails[errorHost = 'orgB' and //accountNumber = accoutnDetails[errorHost = 'orgA']/accountNumber]"/>
</xsl:stylesheet>
请参阅http://xsltransform.hikmatu.com/b4GWV8
处的转化更新后的查询请尝试:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SvcRS[accountHeader/errorHost = 'orgB' and accoutnDetails/accountNumber = //SvcRS[accountHeader/errorHost = 'orgA']/accoutnDetails/accountNumber]"/>
</xsl:stylesheet>
处的转化