仅查找并选择具有其值包含唯一数据的给定属性的元素

时间:2016-03-08 11:03:28

标签: xml xslt

以下是XMl文件

public class AuthenticationTokenProcessingFilter extends OncePerRequestFilter {
...

    @Override
    protected void doFilterInternal(HttpServletRequest req, HttpServletResponse ress, FilterChain chain) throws IOException, ServletException {

        String agent = req.getHeader("User-Agent");
        SecurityManager.setAgent(agent);

        ...
        try {
            chain.doFilter(request, response);
        } finally {
            SecurityManager.clearManager();
        }
    }
}

我想编写一个XSLT代码,该代码只打印包含ThreadLocal属性的元素以及它的项enter code here <items> <item itemcode= "ABC10145" code= "74582 >10</item><item itemcode = "CBD748 Code = "9636">20</item> </items> 。其余的数据应该被删除。

2 个答案:

答案 0 :(得分:0)

我在输入xml中做了几处更改

<?xml version="1.0" encoding="UTF-16"?>
<items> 
<item itemcode= "ABC10145" code= "74582" >10</item>
<item itemcode = "CBD748"   code = "9636">20</item> 
</items>

您可以使用以下模板仅打印属性值=&#34; ABC10145&#34;以及它的项目值=&#34; 10&#34;

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

 <xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="/items/item[@itemcode!='ABC10145' and .!=10]"/>

</xsl:stylesheet>

答案 1 :(得分:0)

预期结果可以通过以下方式实现:

XSLT 1.0

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

<xsl:param name="itemcode" select="'ABC10145'"/>
<xsl:param name="value" select="'10'"/>

<xsl:template match="/items">
    <xsl:copy>
        <xsl:for-each select="item[@itemcode=$itemcode and .=$value]">
            <item itemcode="{@itemcode}">
                <xsl:value-of select="."/>
            </item>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

我假设你想要参数化搜索值。