XPath может сделать это за вас.Вы можете выбрать:
/ROOT/NODE[contains(concat(',', @ord, ','), ',2,')]
Поскольку вы намереваетесь использовать GWT на клиенте, вы можете попробовать gwtxslt .С его помощью вы можете указать таблицу стилей XSLT для выполнения преобразования (т.е. добавления атрибута) для вас:
XsltProcessor processor = new XsltProcessor();
processor.importStyleSheet(styleSheetText);
processor.importSource(sourceText);
processor.setParameter("ord", "2");
processor.setParameter("style", "whatever");
String resultString = processor.transform();
// do something with resultString
, где styleSheetText
может быть документом XSLT вдоль строк
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="ord" select="''" />
<xsl:param name="style" select="''" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="NODE">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:if test="contains(concat(',', @ord, ','), concat(',', $ord, ','))">
<xsl:attribute name="style">
<xsl:value-of select="$style" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Обратите внимание, что я использую concat()
для предотвращения частичных совпадений в списке через запятую, которым на самом деле является значение атрибута @ord
.